JAVA基础——初始化顺序及相关(集各家言论再自己总结的)

来源:互联网 发布:linux重启vnc服务 编辑:程序博客网 时间:2024/06/05 20:21

 

 

 

 

运行得到的结果应该是:

Parent static initialization

Child static initialization

Parent initialization

Parent constructor

Child initialization

Child constructor

Parent initialization

Parent constructor

Child initialization

Child constructor

nChildStaticValue =7,nChildValue = 7

初始化顺序是: 

(1) 先是父类的static变量和static初始化块 (因为在TestFinalize 的main中需要使用Child这个类,所以JVM才去加载它,结果发现它继承自Parent,那么就会发现需要先加载Parent这个class,所以我们会发现是 Parent的static field被初始化&static initialization 先执行,然后child的 static field被初始化&static initialization 执行,static field和static块执行的顺序则是按照它在代码里面书写的顺序从上到下执行的)


(2)然后是子类的static变量和static初始化块   

(3)父类的实例变量、初始化块 (initialization会在每次new一个对象的时候都执行,它和constructor的区别见下面的叙述)

(4)父类的构造方法 

(5)子类的实例变量、初始化块 

(6)子类构造方法 

 

初始化块(Initialization)和构造器(Constructor)

   从某种程度上来讲,可以理解为初始化块是构造器的补充,因为初始化快总是在构造器之前执行,同样也可以对对象初始化.

   与构造器不同的是:初始化块只能执行一段固定的代码,不能够像构造器一样接受参数,而且是对类的所有的对象进行初始化.

    跟构造器一样的,程序在执行的时候不仅会执行当前类的初始化快和构造器,会一直追溯到object类的初始化快和构造器.先执行父类的初始化块和构造器(先初始化块,再构造器),然后再执行当前类的初始化块和构造器.

 

原创粉丝点击