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 }