Java之对象构造过程
2015-06-12 08:59
253 查看
Java中一个对象的构造过程如下:
1-6属于初始化静态部分,如果一个类的静态部分已经初始化了(已经被类加载器加载了),就不会再重复初始化静态部分,静态部分的初始化只会在类加载器加载一个类的时候初始化一次。
1.用类加载器加载父类,按父类静态变量定义的顺序的为父类所有静态变量分配空间,并赋予父类静态变量默认值。
2.用类加载器加载自己,按自己静态变量定义的顺序的为自己所有静态变量分配空间,并赋予自己静态变量默认值。
3.按父类静态变量定义的顺序的为父类所有静态变量赋上定义的值。
4.执行父类静态代码块。
5.按自己静态变量定义的顺序的为自己所有静态变量赋上定义的值。
6.执行自己静态代码块。
7-14属于初始化实例部分。
7.为父类实例变量分配空间,并赋予默认值。
8.为自己实例变量分配空间,并赋予默认值。
9.按父类实例变量定义的顺序的为父类所有实例变量赋上定义的值。
10.执行父类的构造代码块。
11.执行父类的构造方法。
12.按自己实例变量定义的顺序的为自己所有实例变量赋上定义的值。
13.执行自己的构造代码块。
14.执行自己的构造方法。
对象构造完成!
注意:
1.父类如果还有父类就也依照此顺序先初始化父类的父类,直到Object为止。
2.如果执行步骤3、5、9、12时,定义的值引入了别的类,则会初始化那个类,如果引用的类还有引用的类则也按照此顺序先初始化引用类的引用类,直到所有被引用的类全部被初始化完毕为止。
3.如果一个类没有父类(如Object类),则它的初始化顺序可以简化成2、5、6、8、12、13、14。
4.如果这个类已经被类加载器加载过了,也就是该类的静态部分已经初始化过了,那么1、2、3、4、5、6都不会执行,总的顺序可以简化为7、8、9、10、11、12、13、14。
5.如果这个类没有被类加载器加载,但它的父类已经被类加载器加载过了,那么总的顺序可以简化为2、5、6、7、8、9、10、11、12、13、14。
转载请标明原地址,请尊重原创,谢谢。
1-6属于初始化静态部分,如果一个类的静态部分已经初始化了(已经被类加载器加载了),就不会再重复初始化静态部分,静态部分的初始化只会在类加载器加载一个类的时候初始化一次。
1.用类加载器加载父类,按父类静态变量定义的顺序的为父类所有静态变量分配空间,并赋予父类静态变量默认值。
2.用类加载器加载自己,按自己静态变量定义的顺序的为自己所有静态变量分配空间,并赋予自己静态变量默认值。
3.按父类静态变量定义的顺序的为父类所有静态变量赋上定义的值。
4.执行父类静态代码块。
5.按自己静态变量定义的顺序的为自己所有静态变量赋上定义的值。
6.执行自己静态代码块。
7-14属于初始化实例部分。
7.为父类实例变量分配空间,并赋予默认值。
8.为自己实例变量分配空间,并赋予默认值。
9.按父类实例变量定义的顺序的为父类所有实例变量赋上定义的值。
10.执行父类的构造代码块。
11.执行父类的构造方法。
12.按自己实例变量定义的顺序的为自己所有实例变量赋上定义的值。
13.执行自己的构造代码块。
14.执行自己的构造方法。
对象构造完成!
注意:
1.父类如果还有父类就也依照此顺序先初始化父类的父类,直到Object为止。
2.如果执行步骤3、5、9、12时,定义的值引入了别的类,则会初始化那个类,如果引用的类还有引用的类则也按照此顺序先初始化引用类的引用类,直到所有被引用的类全部被初始化完毕为止。
3.如果一个类没有父类(如Object类),则它的初始化顺序可以简化成2、5、6、8、12、13、14。
4.如果这个类已经被类加载器加载过了,也就是该类的静态部分已经初始化过了,那么1、2、3、4、5、6都不会执行,总的顺序可以简化为7、8、9、10、11、12、13、14。
5.如果这个类没有被类加载器加载,但它的父类已经被类加载器加载过了,那么总的顺序可以简化为2、5、6、7、8、9、10、11、12、13、14。
转载请标明原地址,请尊重原创,谢谢。
相关文章推荐
- Java的封装特性
- Java中==与equals的区别小结
- Java单元测试(Junit+Mock+代码覆盖率)
- Spring3 MVC请求参数获取的几种场景
- Java实现简单字符生成器代码例子
- Java面向对象的三大特征
- Java第四次实验报告
- struts2学习笔记(3)---Action中访问ServletAPI获取真实类型的Servlet元素
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- java string is immutable
- java method invocation demo
- eclipse搜索使用_Ctrl+F/H
- JAVA第四次实验
- java中方法重载和递归调用
- java demo
- Java 零基础跑起第一个程序
- springmvc 发送ajax中文乱码的几种解决办法
- java实验报告五
- java基础——反射
- Java实验报告五