Java中對象的初始化生成過程

Java是面向對象的一種語言,在Java對象生成的過程,涉及子類和父類的加載、靜態成員變量的初始化、子類和父類對象的初始化等過程,其具體過程通過下述代碼來說明。

  1. class A 
  2.     public A(String s) 
  3.     { 
  4.         System.out.println(s+" Constructor A"); 
  5.     } 
  6.  
  7. class B 
  8.     public B(String s) 
  9.     { 
  10.         System.out.println(s+ " Constructor B"); 
  11.     } 
  12.  
  13. class C 
  14.     public C(String s) 
  15.     { 
  16.         System.out.println(s+ " Constructor C"); 
  17.     } 
  18.  
  19. class Base 
  20.     static A a1 = new A("a1: static"); 
  21.     A a2 = new A("a2: normal"); 
  22.     public Base() 
  23.     { 
  24.         A a3 = new A("a3: normal"); 
  25.         System.out.println("Constructor Base"); 
  26.     } 
  27.  
  28. class Derived extends Base 
  29.     static B b1 = new B("b1: static"); 
  30.     B b2 = new B("b2: normal"); 
  31.     public Derived() 
  32.     { 
  33.         B b3 = new B("b3: normal"); 
  34.         System.out.println("Constructor Derived"); 
  35.     } 
  36.  
  37. public class Test { 
  38.     static C c1 = new C("c1: static"); 
  39.     C c2 = new C("c2: normal"); 
  40.     public static void main(String[] args) { 
  41.         C c3 = new C("c3: normal"); 
  42.         Derived derived = new Derived(); 
  43.         System.out.println("end"); 
  44.     } 

該段代碼的執行結果爲:

c1: static Constructor C
c3: normal Constructor C
a1: static Constructor A
b1: static Constructor B
a2: normal Constructor A
a3: normal Constructor A
Constructor Base
b2: normal Constructor B
b3: normal Constructor B
Constructor Derived
end

對上述執行結果進行分析,其生成過程爲:

1)程序執行時,首先加載main函數所在的類Test,由於Test類包含靜態成員變量c1,因此對該變量進行初始化,調用其構造函數。

2)由於c2是Test類的對象成員變量,且此處並沒有初始化Test類對象,因此不需要初始化c2。

3)執行main函數。

4) main函數聲明且初始化變量c3,因此調用其構造函數。

5)main函數聲明且初始化變量derived,此過程可具體劃分爲以下步驟:

  a) 加載Derived類,由於其繼承自Base類,因此還需加載Base類。

  b) 類加載完成後,由父類至子類,先後完成其中靜態成員變量的初始化,因此先後調用a1,b1的構造函數。

  c) 靜態成員變量初始化後,由父類至子類,先後完成類對象的初始化。在類對象的初始化過程中,首先初始化對象成員變量,再調用構造函數。因此,在Base類,首先調用a2的構造函數,再調用Base的構造函數,在構造函數中,調用a3的構造函數;而在Derived類,首先調用b2的構造函數,再調用Derived的構造函數,在構造函數中,調用b3的構造函數。

6) 綜上,完成了整個對象的初始化生成過程和程序運行。

❤提問/互動請留言,可直接在最底右下方"寫留言即可"

❤Java初高級一起學習分享,共同學習纔是最明智的選擇,喜歡的話可以我的學習羣64弍46衣3凌9,或加資料羣69似64陸0吧3(進羣備註平臺名)

❤如果覺得寫得不錯請點擊“訂閱”,每天更新全新的內容!

❤你們的喜歡和關注就是我最大的動力支撐!!!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章