程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java : 結構器與代碼塊(有無static) , 子類父類 , 依賴類 執行順序詳解

Java : 結構器與代碼塊(有無static) , 子類父類 , 依賴類 執行順序詳解

編輯:關於JAVA

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 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved