Java类中各成员初始化的顺序
作者:网络转载 发布时间:[ 2015/6/16 11:37:08 ] 推荐标签:编程语言 软件开发
从结果可以看出类中各成员初始化的顺序是:
1.如果类中存在继承关系(像 Son 继承 Father) 则首先会初始化导出类(Son)的基类(Father),然后再是导出类
2.在基类首先会初始化静态 的东西 静态块>静态变量 而且只初始化一次 (因为静态的东西都是跟着类的加载而加载的)
3.随后是初始化导出类的静态东西 跟基类的静态初始化一样(同上)
4.初始化基类无参构造器(调用有参初始化有参构造器)
5.初始化导出类无参构造器(注意:导出类的成员变量和代码块都是是比构造函数的初始化要早。。看输出结果可知)
在上面输出结果大家可能会看到在基类中的构造器中调用了show() 方法,这样的输出可能不奇怪,我现在改一下。
1 class Father
2 {
3 private static String s= print();
4
5 static{
6 System. out.println("父类静态代码块初始化" );
7 }
8 {
9 System. out.println("父类代码块初始化" );
10 }
11 public static String print()
12 {
13 System. out.println("父类静态方法" );
14 return "父类静态成员变量的初始化" ;
15 }
16 public Father()
17 {
18 System. out.println("父类无参构造函数初始化完成" );
19 show();
20 }
21 public void show()
22 {
23 System. out.println("父类show()方法" );
24 }
25 }
26 class Son extends Father
27 {
28 static{
29 System. out.println("子类静态代码块初始化" );
30 }
31 {
32 System. out.println("子类代码块初始化" );
33 }
34 private int i =1;
35 private String s="子类私有成员变量" ;
36 public void show()
37 {
38 System. out.println("子类show()方法:i=" +i);
39 }
40 public Son()
41 {
42 System. out.println("子类构造函数初始化完成" );
43 System. out.println("子类成员变量初始化完成:s=" +s);
44 show();
45 }
46 }
47 public class TestClassLoadSeq {
48 public static void main(String[] args)
49 {
50 new Son();
51 }
52
53 }
54
输出结果:
子类静态代码块初始化
父类代码块初始化
父类无参构造函数初始化完成
子类show()方法:i=0
子类代码块初始化
子类构造函数初始化完成
子类成员变量初始化完成:s=子类私有成员变量
子类show()方法:i=1
可以看出跟上面的代码没有什么不同,的不同是我把导出类中的静态成员变量i 变成了成员变量i,可以看出结果是截然不同,现在的结果是:0
原因:因为上面的静态成员变量是跟着类的加载而初始化的 所以结果是1 而下面的是 成员变量又因为现在还在基类构造器中所以导出类中的成员变量还没有得到初始化 所以是0
所以上面的初始化顺序不够完整,现在补全下:
首先jvm加载类时 会对每个对象的默认初始化 为0 ,对通过组合方式的引用类型 默认初始化为 null
总结:
java中首先初始化基类在初始化导出类(有多少个基类初始化多少个)
如果那里有错误希望大家帮忙提出了大家一起学习(自己也在学习中。。。。)。
提示: java中的各成员初始化的顺序是非常重要的,很好的掌握对以后的学习非常有帮助
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

sales@spasvo.com