java中在创建对象时候的初始化顺序
来源:互联网 发布:网络eve什么意思 编辑:程序博客网 时间:2024/05/22 01:25
今天想说说java在创建对象的时候的初始化顺序,其实大家如果笔试,或者面试的时候,经常会遇到一些初始化的问题,反正我是遇到过。今天我们就来看看。
先看下我写的几个示例类,一个父类,一个子类继承这个父类,最简单的模式。
- /**父类*/
- package test;
- public class Father {
- static
- { System.out.println("父类静态初始化块");}
- { System.out.println("父类初始化块"); }
- private static int b = 1;
- public Father() {
- System.out.println("调用了父类无参构造器");
- }
- public Father(int b) {
- this.b = b;
- System.out.println("调用父类的有参构造器");
- }
- }
- /**子类*/
- package test;
- public class Son extends Father {
- static
- { System.out.println("子类静态初始化块"); }
- { System.out.println("子类初始化块"); }
- private static int a =1;
- public Son() {
- System.out.println("调用子类的构造器");
- }
- public Son(int a){
- this.a=a;
- System.out.println("调用子类的有参构造器");
- }
- }
- 单独的一个对象初始化,不含继承和其他情况
- package test;
- public class Test {
- public static void main(String[] args) {
- Father father = new Father();
- }
- }
打印的结果为:
父类静态初始化块
父类初始化块
调用了父类无参构造器
我们来分析下,大家都知道静态对象(包括静态块,静态方法,静态属性),都是和类相关联的。当第一次创建对象的时候,首先初始化的应该是静态对象,然后才是非静态对象,最后才是构造器去创建实例。所以大致的顺序应该是:静态对象-非静态对象-构造器。那么在静态对象或者非静态对象中是否也存在一个什么顺序呢?经过测试,我们发现其实在同等的优先级的情况下,是按照声明的顺序初始化的。
- 包含继承的子类初始化
下面讨论另外一个问题,设计到继承的问题,我们现在创建Son对象,他会执行父类的一些初始化么,他和子类的一些初始化之间又存在什么关联呢?
- package test;
- public class Test {
- public static void main(String[] args) {
- Son son = new Son();
- }
- }
打印语句:
父类静态初始化块
子类静态初始化块
父类初始化块
调用了父类无参构造器
子类初始化块
调用子类的构造器
打印语句告诉了我们,静态对象依然是第一个初始化的,然后呢?就是父类中的非静态对象-构造器,子类中的非静态对象-构造器。
- 包含继承和多态的子类初始化
再看如果是多态的情况下会有什么情况出现呢?
- package test;
- public class Test {
- public static void main(String[] args) {
- Father father = new Son();
- }
- }
打印语句:
父类静态初始化块
子类静态初始化块
父类初始化块
调用了父类无参构造器
子类初始化块
调用子类的构造器
和前面继承的情况完全一样,这里不再啰嗦了。
总的一个结论就是:静态对象总是在第一次创建对象前就已经初始化完毕,初始化的顺序从最顶端的父类到子类,只会初始化一次。然后就是从父类到子类中,依次初始化非静态对象和构造器。
- java中在创建对象时候的初始化顺序
- java在创建对象时候 成员的执行顺序
- Java中创建对象的时候代码执行顺序
- Java中对象的初始化顺序
- Java中new类的时候初始化的顺序
- java中对象初始化顺序
- Java中对象初始化顺序
- Java中对象初始化顺序
- Java中对象初始化顺序
- java类的初始化和对象的创建顺序
- Java创建对象的初始化顺序(转载)
- Java继承,创建对象初始化顺序
- java对象创建过程/初始化顺序
- java对象创建过程及初始化顺序
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- java对象的初始化顺序
- java对象的初始化顺序
- java对象的初始化顺序
- 能不做自己写个类,也叫java.lang.String?
- VS2013+CUDA+TBB
- ViewPager+Fragment动态增加页面,删除页面
- ZOJ_3949 Edge to the Root
- 一种常见的网页防篡改方案
- java中在创建对象时候的初始化顺序
- C# http 性能优化500毫秒到 60 毫秒
- 女生赛hdu6027
- app:transformClasses_enhancedWithInstantReloadDexForDebug
- matlab常用命令汇总
- Fiddler 模拟浏览器提交数据
- 省赛总结
- 20170508Ubuntu 12.xx 修改mysql的最大连接数
- 也许下一个倾家荡产的就是你