Java : 結構器與代碼塊(有無static) , 子類父類 , 依賴類 執行順序詳解。本站提示廣大學習愛好者:(Java : 結構器與代碼塊(有無static) , 子類父類 , 依賴類 執行順序詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java : 結構器與代碼塊(有無static) , 子類父類 , 依賴類 執行順序詳解正文
1.依賴類成員先執行
2.靜態代碼塊(static)先於普通代碼塊
3.同種代碼塊(均為static修飾或均無static),父類先於子類
總結: [依賴類成員]
-> 父類靜態成員(static block)
-> 子類靜態成員(static block)
-> 父類普通成員(normal block)
-> 父類結構器
->子類普通成員(normal block)
->子類結構器
詳細例子:
1 /*
2 學術問題:
3 剖析上面代碼的執行順序 -> 研討結構器與有無static
4 -> 子類與父類
5 -> 本身類與依賴類
6
7 輸入後果:
8 ---------- java ----------
9 Subclass static block //ConstructorStaticInitDemo類(後執行)依賴於Subclass類(先執行)
10 Superclass [static] block //無static修飾的代碼塊在結構器中執行
11 Superclass結構器
12 Subclass結構器
13 結構器
14 static block
15 main
16
17
18 */
19
20 public class ConstructorStaticBlockDemo
21 {
22 private static ConstructorStaticBlockDemo constructorStaticBlockDemo = new ConstructorStaticBlockDemo();
23 private Subclass subclass = new Subclass();
24
25 static
26 {
27 System.out.println("static block");
28 }
29
30 public ConstructorStaticBlockDemo()
31 {
32 System.out.println("結構器");
33 }
34
35 public static void main(String [] args)
36 {
37 System.out.println("main");
38 }
39 }
40
41 class Superclass
42 {
43 Superclass()
44 {
45 // -> 執行無static修飾的代碼塊
46 System.out.println("Superclass結構器");
47 }
48
49 //此處若有static,則父類代碼塊先執行(Superclass [static] block執行完後,再執行Subclass static block)
50 {
51 System.out.println("Superclass [static] block");
52 }
53 }
54
55
56 class Subclass extends Superclass
57 {
58
59 Subclass()
60 {
61 //隱式的super();
62 System.out.println("Subclass結構器");
63 }
64
65 //static代碼塊隨字節碼加載進JVM中就執行,即隨著類的執行而執行
66 static
67 {
68 System.out.println("Subclass static block");
69 }
70
71 }
經過反編譯class字節碼:
1 public class ConstructorStaticBlockDemo
2 {
3
4 private static ConstructorStaticBlockDemo constructorStaticBlockDemo = new ConstructorStaticBlockDemo();
5 private Subclass subclass;
6
7 public ConstructorStaticBlockDemo()
8 {
9 subclass = new Subclass();
10 System.out.println("結構器");
11 }
12
13 public static void main(String args[])
14 {
15 System.out.println("main");
16 }
17
18 static
19 {
20 System.out.println("static block");
21 }
22 }