脚本宝典收集整理的这篇文章主要介绍了Java对象初始化顺序,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
初始化顺序:
1.有无父类?
有:
将父类加载进内存。直到将所有的父类加载完毕。再从顶层父类按照代码的顺序执行静态代码,执行完最顶层的,在执行下一层的,依次类推,直到执行完所有的静态代码。
(1)如果有初始化子类对象。那么同样会先调用父类的构造器,并且会先执行最底层父类的构造器。
先将所有成员属性设置成为默认值,接着依据代码的顺序初始化所有成员。初始化完毕之后,再执行构造器内的方法。初始化完父类后,依次初始化子类的。
无:
那么接下来的步骤跟(1)处的处理方式是一样的。
下面给出例子:
package org.csp.test; public class Test extends Insect{ PRivate int k = printInIT("Test initialized"); ----(11),类似的要先被清0,然后再调用printInit()方法 public Test() { @R_406_2663@tem.out.println("k ="+k); ---(12) 初始化属性后,执行构造器内的代码 System.out.println("j ="+j); ----(13) } private static int x2 = printInit("Test X2 initialized"); ---(3)因为是静态成员 public static void main(String[] args) { System.out.println("haha"); ---(4) Test t = new Test(); ---(5)创建对象,接下去要初始化成员对象,但是要先初始化父类的 } } class Insect { ------(7)先将所有的成员设置为默认值 private int i =9 ; -----(7)先被设置为默认值0 -----(8) 按照代码顺序初始属性 protected int j; -----(7)被设置为默认值0 static{ System.out.println("hahaaaa"); } **----(1)最先执行** Insect() { System.out.println("i = "+i+",j = "+j); ----(9) 执行构造器内的代码 j=39; ------(10)此处已经将父类初始化完毕,返回去初始子类对象 } private static int x1= printInit("static Insect.X1 initialized"); ----(2) static int printInit(String s) { System.out.println(s); return 47; } }
执行结果
hahaaaa static Insect.X1 initialized Test X2 initialized haha i = 9,j = 0 Test initialized k =47 j =39
以上是脚本宝典为你收集整理的Java对象初始化顺序全部内容,希望文章能够帮你解决Java对象初始化顺序所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。