关闭

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

891人阅读 评论(0) 收藏 举报

 

 

 

 

运行得到的结果应该是:

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类的初始化快和构造器.先执行父类的初始化块和构造器(先初始化块,再构造器),然后再执行当前类的初始化块和构造器.

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:240504次
    • 积分:2222
    • 等级:
    • 排名:第16951名
    • 原创:18篇
    • 转载:13篇
    • 译文:0篇
    • 评论:75条