您的位置:首页 > 编程语言 > Java开发

关于java类初始化的顺序

2015-01-26 19:51 92 查看
类的加载顺序

什么时候类加载

第一次需要使用类信息时加载。

类加载的原则:延迟加载,能不加载就不加载。

通过分析示例来讨论

示例1:



结果如下:



首先可以看到 两次创建实例(new aaa())却只执行了一次静态代码块中的内容

再看

示例2:





可以看到 没有创建对象也执行了静态代码块中的内容

得出结论:静态代码块在类编译的时候就执行 且只执行一次

先调用了执行了静态代码块中的内容

可以看出 最先加载了静态成员变量

再分析示例1:

因为静态代码块在编译时就已经执行 所以当new aaa()时先执行了构造代码块 然后在执行构造方法

示例3:





如图所示 类Test2继承了类aaa

现在来看创建子类示例过程中的初始化顺序:

可以看到 执行顺序:父类静态代码块 ->子类静态代码块->(创建子类示例:)父类构造代码块->子类构造代码块->父类构造器->子类构造代码块->子类构造器

通过debug方式(由于过程不好截图 就直接给出结论了) 得出结论:

综合上述 执行顺序为:查找父类->父类静态代码块->子类静态代码块->(创建子类示例)先找到子类的构造方法->执行子类构造方法中的super()方法(不显示 jvm默认添加)调用父类构造方法->父类构造代码块->父类构造器->子类构造代码块->子类构造器

-version1.1 2015.1.26
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: