1. 程式人生 > 其它 >Java_靜態程式碼塊、構造程式碼塊、構造器和類的初始化載入順序

Java_靜態程式碼塊、構造程式碼塊、構造器和類的初始化載入順序

非常細緻的載入順序講解 轉載 site:https://www.cnblogs.com/Qian123/p/5713440.html

class Parent {
 2         /* 靜態變數 */
 3     public static String p_StaticField = "父類--靜態變數";
 4          /* 變數 */
 5     public String    p_Field = "父類--變數";
 6     protected int    i    = 9;
 7     protected int    j    = 0;
 8         /* 靜態初始化塊 */
 9     static {
10         System.out.println( p_StaticField );
11         System.out.println( "父類--靜態初始化塊" );
12     }
13         /* 初始化塊 */
14     {
15         System.out.println( p_Field );
16         System.out.println( "父類--初始化塊" );
17     }
18         /* 構造器 */
19     public Parent()
20     {
21         System.out.println( "父類--構造器" );
22         System.out.println( "i=" + i + ", j=" + j );
23         j = 20;
24     }
25 }
26 
27 public class SubClass extends Parent {
28          /* 靜態變數 */
29     public static String s_StaticField = "子類--靜態變數";
30          /* 變數 */
31     public String s_Field = "子類--變數";
32         /* 靜態初始化塊 */
33     static {
34         System.out.println( s_StaticField );
35         System.out.println( "子類--靜態初始化塊" );
36     }
37        /* 初始化塊 */
38     {
39         System.out.println( s_Field );
40         System.out.println( "子類--初始化塊" );
41     }
42        /* 構造器 */
43     public SubClass()
44     {
45         System.out.println( "子類--構造器" );
46         System.out.println( "i=" + i + ",j=" + j );
47     }
48 
49 
50         /* 程式入口 */
51     public static void main( String[] args )
52     {
53         System.out.println( "子類main方法" );
54         new SubClass();
55     }
56 }

結果:

父類--靜態變數
父類--靜態初始化塊
子類--靜態變數
子類--靜態初始化塊
子類main方法
父類--變數
父類--初始化塊
父類--構造器
i=9, j=0
子類--變數
子類--初始化塊
子類--構造器
i=9,j=20