博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java初始化顺序
阅读量:6341 次
发布时间:2019-06-22

本文共 2974 字,大约阅读时间需要 9 分钟。

Java初始化顺序

普通类初始化

1 package com.fwj.init; 2  3 public class Sample { 4  5     Sample(String s){ 6           System.out.println(s); 7     } 8     Sample(){ 9           System.out.println("Sample默认构造函数被调用");10     }11 }
1 package com.fwj.init; 2  3 public class Test { 4     static Sample sam=new Sample("静态成员sam初始化"); 5     Sample sam1=new Sample("sam1成员初始化"); 6     static{ 7           System.out.println("static块执行"); 8  9           if(sam==null)System.out.println("sam is null");10 11           sam=new Sample("静态块内初始化sam成员变量");12 13           }14     Test(){15           System.out.println("Test默认构造函数被调用");16     }17     public static void main(String[] args) {18         new Test();19     }20 }

运行结果:

静态成员sam初始化static块执行静态块内初始化sam成员变量sam1成员初始化Test默认构造函数被调用

结论:

1、静态成员首先初始化

2、普通成员初始化

3、构造函数初始化

对于静态成员之间和普通成员之间的初始化顺序,之和他们的定义顺序有关:

1 package com.fwj.init; 2  3 public class Test { 4     static{ 5         System.out.println("static 块 1  执行"); 6         } 7   static Sample staticSam1=new Sample("静态成员staticSam1初始化"); 8   Sample sam1=new Sample("sam1成员初始化"); 9   static Sample staticSam2=new Sample("静态成员staticSam2初始化");10   static{11         System.out.println("static 块 2  执行");12 13         }14   Test(){15         System.out.println("Test默认构造函数被调用");16   }17   Sample sam2=new Sample("sam2成员初始化");18   19   public static void main(String[] args) {20         new Test();21   }22 }

执行结果:

static 块 1  执行静态成员staticSam1初始化静态成员staticSam2初始化static 块 2  执行sam1成员初始化sam2成员初始化Test默认构造函数被调用

Java继承情况下的初始化顺序

1 package com.fwj.init; 2  3 public class Test { 4     static { 5         System.out.println("父类static 块 1  执行"); 6     } 7  8     static Sample staticSam1 = new Sample("父类 静态成员staticSam1初始化"); 9     Sample sam1 = new Sample("父类 sam1成员初始化");10     static Sample staticSam2 = new Sample("父类 静态成员staticSam2初始化");11     12     static {13         System.out.println("父类 static 块 2  执行");14 15     }16 17     Test(){18         System.out.println("父类 Test默认构造函数被调用");19     }20     Sample sam2 = new Sample("父类 sam2成员初始化");21 }
1 package com.fwj.init; 2  3 public class TestSub extends Test { 4  5     static Sample staticSamSub = new Sample("子类 静态成员staticSamSub初始化"); 6  7     TestSub() 8     { 9         System.out.println("子类 TestSub 默认构造函数被调用");10     }11 12     Sample sam1 = new Sample("子类 sam1成员初始化");13     static Sample staticSamSub1 = new Sample("子类 静态成员staticSamSub1初始化");14     15     static {16         System.out.println("子类 static 块  执行");17     }18     19     Sample sam2 = new Sample("子类 sam2成员初始化");20 21     public static void main(String[] args) {22         new TestSub();23     }24 25 }

运行结果:

父类static 块 1  执行父类 静态成员staticSam1初始化父类 静态成员staticSam2初始化父类 static 块 2  执行子类 静态成员staticSamSub初始化子类 静态成员staticSamSub1初始化子类 static 块  执行父类 sam1成员初始化父类 sam2成员初始化父类 Test默认构造函数被调用子类 sam1成员初始化子类 sam2成员初始化子类 TestSub 默认构造函数被调用

结论:

1、继承体系的所有静态成员初始化,先父类,后子类。

2、父类完成初始化,普通成员初始化---》构造方法初始化

3、子类完成初始化,普通成员初始化---》构造方法初始化

 

 

引用:

转载于:https://www.cnblogs.com/mingluosunshan/p/3222444.html

你可能感兴趣的文章
eclipse html 打开方式
查看>>
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
查看>>
人类投资经理再也无法击败电脑的时代终将到来了...
查看>>
一个最小手势库的实现
查看>>
HoloLens开发手记 - Vuforia开发概述 Vuforia development overview
查看>>
Android支付之支付宝封装类
查看>>
<亲测>CentOS中yum安装ffmpeg
查看>>
【分享】马化腾:产品设计与用户体验
查看>>
【机器学习PAI实践十】深度学习Caffe框架实现图像分类的模型训练
查看>>
全智慧的网络:思科十年来最具颠覆性的创新
查看>>
怎样将现有应用迁移到 VMware NSX
查看>>
赛门铁克收购以色列移动安全初创公司Skycure 旨在构建网络安全防御平台
查看>>
《Photoshop蒙版与合成(第2版)》目录—导读
查看>>
“最佳人气奖”出炉!4月27号,谁能拿到阿里聚安全算法挑战赛的桂冠?
查看>>
《网页美工设计Photoshop+Flash+Dreamweaver从入门到精通》——2.6 图层与图层样式...
查看>>
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.7节获取线路
查看>>
Spring中 @Autowired标签与 @Resource标签 的区别
查看>>
人工智能凭什么毁灭人类
查看>>
今天的学习
查看>>
面试必问之JVM原理
查看>>