Java类初始化顺序 博客分类: JAVA基础 java初始化顺序
程序员文章站
2024-03-12 10:34:50
...
package com.tongbanjie.trade.test.base; public class Son extends Father{ private static Member staticMember = new Member("子类静态成员变量初始化"); private Member member = new Member("子类普通成员变量初始化......"); static { System.out.println("子类静态代码块一....开始执行......"); } Son(String aa) { System.out.println("子类构造方法开始执行......"); } static { System.out.println("子类静态代码块二....开始执行......"); } public static void main(String[] args) { new Son("aa"); } }
package com.tongbanjie.trade.test.base; public class Father { private static Member staticMember = new Member("父类静态成员变量初始化......"); private Member member = new Member("父类普通成员变量初始化......"); static { System.out.println("父类静态代码块开始执行......"); } Father() { System.out.println("父类无参构造方法开始执行......."); } Father(String aa) { System.out.println("父类有参构造方法开始执行......"); } }
package com.tongbanjie.trade.test.base; public class Member { Member() { System.out.println("Member 默认构造方法开始执行......."); } Member(String str) { System.out.println(str); } }
执行结果如下图:
分析结果可以知道
先执行父类静态代码区域(静态代码块和静态常量顺序执行),
再执行子类静态代码区域,
再执行父类普通成员变量,
再执行父类无参构造函数,
再执行子类普通成员变量,
再执行子类构造函数
由此得出Java初始化顺序结论:
1 继承体系的所有静态成员初始化(先父类,后子类)
2 父类初始化完成(普通成员的初始化-->构造函数的调用)
3 子类初始化(普通成员-->构造函数)
图示初始化顺序:
推荐阅读
-
Java类初始化顺序 博客分类: JAVA基础 java初始化顺序
-
java图形界面基础之画图(使用Graphics类从画图形到图片到gif) 博客分类: java图形界面基础java图形界面基础,事件机制 javaGraphicsJFramegif
-
Java object Initialization (class Instantiation) | 对象的初始化(即类的实例化) 博客分类: Java Foundation javaobject InitializationClass Instantiation对象的初始化类的实例化
-
java中的变量初始化问题 博客分类: java Java
-
java匿名类 博客分类: 基础知识
-
java初始化顺序
-
Java类加载初始化的过程及顺序
-
Java类加载初始化的过程及顺序
-
不可变类String--阅读源码从jdk开始 博客分类: java基础 java String不可变类
-
Java数组声明、创建、初始化 博客分类: JAVA面试题 Java