为什么称为暗执行顺序,因为当我们在new 对象时,其不是简简单单的new一个完事,它要首先检查父类的,静态的,非静态的等代码,就好像我们结婚生孩子一样,要先到祖宗那里,公安局那里,左邻右舍那里,告诉他们,我们要结婚了.下面来看其本质:

这里有一个父类一个子类:

class Father{
{
System.out.println("父类非静态代码块");
}
static{
System.out.println("父类静态代码块");
}
public Father(){
System.out.println("父类构造器");
}
public static void method(){
System.out.println("父类静态方法");
}
public void method2(){
System.out.println("父类非静态方法");
}
} class Son extends Father{
{
System.out.println("子类非静态代码块");
}
static{
System.out.println("子类静态代码块");
}
public Son(){
System.out.println("子类构造器");
}
public static void method(){
System.out.println("子类静态方法");
}
public void method2(){
System.out.println("子类非静态方法");
}
} 当new Son()时,会打印:

  父类静态代码块
  子类静态代码块
  父类非静态代码块
  父类构造器
  子类非静态代码块
  子类构造器

可能你会总结出这样的规律:先父后子,先静态后非静态最后才是构造器,但这是不准确的,因为按这个原则还有一种执行顺序:

  父类静态代码块
  父类非静态代码块
  父类构造器

  子类静态代码块
  子类非静态代码块
  子类构造器

所以观察了细微问题后,对规律再做总结,就像我们写论文一样,用目录层级完美诠释它们的执行顺序:

1.静态代码块:

  1.1 父的

  1.2 子的

2.父其他

  2.1 父非静态代码块

  2.2 父构造器

3.子其他

  3.1 子非静态代码块

  3.2 子构造器

即:总体原则是静态代码块--->父其他--->子其他.

你记住了吗?

												

new 对象时的暗执行顺序的更多相关文章

  1. 运行page页面时的事件执行顺序

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  2. 转:运行page页面时的事件执行顺序及页面的回发与否深度了解

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  3. AngularJS指令嵌套时link函数执行顺序的问题

    今天研究指令嵌套时,发现子指令的link函数先于父指令的link函数执行. 这样和预想的顺序不一样. 也就是说,如果子指令的某个scope变量依赖于父指令传来的参数时,可能一直是undefinded比 ...

  4. java对象实例化 静态块,对象块,构造函数执行顺序

    public class TestA { public static void main(String []args) { new B(); } } class A { static { System ...

  5. java类的初始化块/执行顺序,实例化对象数据赋值

    java里初始化一个类的对象,通过初始化快或者构造方法进行数据赋值.与其相关的执行代码有这么几种: 静态初始化块 初始化块 构造方法 静态初始化块 静态初始化块只在类加载时执行一次,同时静态初始化块只 ...

  6. 当C#中带有return的TryCatch代码遇到Finally时代码执行顺序

    编写的代码最怕出现的情况是运行中有错误出现,但是无法定位错误代码位置.综合<C#4.0图解教程>,总结如下: TryCatchFinally用到的最多的是TryCatch,Catch可以把 ...

  7. Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同

    我们有时会通过ajax动态获取一段Html代码,并且将这段代码通过javascript放到页面的Dom结构中去. 而很多时候通过ajax动态获取的Html代码中也包含javascript代码,有一点需 ...

  8. C++-理解构造函数、析构函数执行顺序

    先初始化序列中的函数调用,如果基类构造函数为非引用传递,则引起参数的拷贝构造 再: 先类内的成员构造函数(拷贝/默认),再类的构造函数:先基类,再派生类: 本文主要说明对象创建时构造函数的执行顺序,对 ...

  9. java中的静态代码块等执行顺序

    http://www.cnblogs.com/naruto469/p/3608459.html public class Print { 2 3 public Print(String s){ 4 S ...

随机推荐

  1. kibana升级之后原本保存的数据dashboards, visualizations, index patterns丢失

    1,es升级注意的问题:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rolling-upgrades.html 2,kiba ...

  2. conda基本操作

    准备环境 # 下载并安装conda基础环境 $ wget https://mirror.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-4.3.1 ...

  3. 那些令人迷惑的名词:切图/H5/XML/REST

    长时间以来对一些名词感到很困惑,不明白其具体指什么,在此记录一下. 一.切图 1.1 原先理解 从字面意思理解,切图是指将一张大的图切割成很多张小的图片.最早(视频教程网或者我要自学网)看到的视频也是 ...

  4. learning makefile 定义命令包

  5. C#语句从MySQL中简单的读取数据库信息

    protected void Page_Load(object sender, EventArgs e) { //数据库+Json MyJson.JsonNode_Object json = new ...

  6. tensoFlow之DNN文本分类

    TensorFlow文本分类: 亲测可用:https://blog.csdn.net/u012052268/article/details/77862202 简单实例:https://www.leip ...

  7. navicat 定时备份

    1.点击备份-->新建备份 2.对象选择:可以选择要备份的表也可以不选,默认全部选择:之后点击保存:输入文件名即可:注意弹框不会消失,这是已经生成了备份任务 3.点击计划-->新建批量计划 ...

  8. php解析Excel表格并且导入MySQL数据库

    最近根据客户需求,需要增加一个导入Excel表格的功能,Excel中存放的是知识库中医知识的分类体系目录.是在thinkphp框架下编写的代码,用的是phpexcel第三方包.测试环境用的是xampp ...

  9. 18-09-19 关于outlook的使用

  10. OpenCV学习(一)基础篇

    OpenCV 2 计算机视觉编程手册读书笔记1 矩阵创建 Mat类是OpenCV中非常有用类,用来创建和操作多维矩阵.可以有很多方法构造它. // 构造函数 //! constructs 2D mat ...