Java类初始化顺序?
1 个回答
见过花就好,何必在意花属于谁。java小生对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。 **实例代码** ```java public class InitialOrderTest { /* 静态变量 */ public static String staticField = "静态变量"; /* 变量 */ public String field = "变量"; /* 静态初始化块 */ static { System.out.println( staticField ); System.out.println( "静态初始化块" ); } /* 初始化块 */ { System.out.println( field ); System.out.println( "初始化块" ); } /* 构造器 */ public InitialOrderTest() { System.out.println( "构造器" ); } public static void main( String[] args ) { new InitialOrderTest(); } } ``` **输出** 运行以上代码,我们会得到如下的输出结果: 1. 1.静态变量 2. 2.静态初始化块 3. 3.变量 4. 4.初始化块 5. 5.构造器 **继承的情况** 实例代码: ```java class Parent { /* 静态变量 */ public static String p_StaticField = "父类--静态变量"; /* 变量 */ public String p_Field = "父类--变量"; protected int i = 9; protected int j = 0; /* 静态初始化块 */ static { System.out.println( p_StaticField ); System.out.println( "父类--静态初始化块" ); } /* 初始化块 */ { System.out.println( p_Field ); System.out.println( "父类--初始化块" ); } /* 构造器 */ public Parent() { System.out.println( "父类--构造器" ); System.out.println( "i=" + i + ", j=" + j ); j = 20; } } public class SubClass extends Parent { /* 静态变量 */ public static String s_StaticField = "子类--静态变量"; /* 变量 */ public String s_Field = "子类--变量"; /* 静态初始化块 */ static { System.out.println( s_StaticField ); System.out.println( "子类--静态初始化块" ); } /* 初始化块 */ { System.out.println( s_Field ); System.out.println( "子类--初始化块" ); } /* 构造器 */ public SubClass() { System.out.println( "子类--构造器" ); System.out.println( "i=" + i + ",j=" + j ); } /* 程序入口 */ public static void main( String[] args ) { System.out.println( "子类main方法" ); new SubClass(); } } ``` 输出: 父类--静态变量 父类--静态初始化块 子类--静态变量 子类--静态初始化块 子类main方法 父类--变量 父类--初始化块 父类--构造器 i=9, j=0 子类--变量 子类--初始化块 子类--构造器 i=9,j=20 子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。静态变量、静态初始化块,变量、初始化块初始化了顺序取决于它们在类中出现的先后顺序。编辑于 2021-06-17 11:02 •IP属地 安徽举报评论收藏
公众号进入网站体验更佳

