執行時,先訪問main函式。
載入器開始啟動並找出該類的編譯**。
載入時,由於extends知道有乙個基類,於是載入基類。如果基類仍舊有基類,那麼再載入。
直到所有的基類載入完畢。
很重要的一點是static方法是在載入類的時候就被執行了,而static域也在此時也會在此時進行初始化。
所有的類載入完畢。開始建立物件。
物件中所有的基本型別會被設定為預設值。
然後會執行非靜態**塊進行初始化。
最後呼叫構造器。(注意,基類構造器會在構造器中優先執行。)
其實很重要的是這個過程分了兩部分,乙個是載入編譯**,另乙個是初始化,而且載入編譯**早於初始化進行。
不論是static域、static方法還是靜態**塊,都是在載入class檔案的時候執行的。
非原始碼,原始碼請移步:
結果:
這個真的是很簡單的例子了,但是卻能反應上邊所說的大部分情況(無靜態**塊和非靜態**塊),按照上邊的規則來其實是很好理解的。
如有不足,歡迎指出!
類的繼承和類的初始化
父類 子類 class a para1 para def init self,name,name1 self.name name self.name1 name1 def function1 self print function1 def functon2 self print function2...
c 中成員物件初始化和類繼承初始化
對於繼承的物件,建構函式在成員初始化列表中使用類名來呼叫特定的基類建構函式。對於成員物件,建構函式則使用成員名。例如 ifndef h frabjous define h frabjous include class frabjous virtual void tell gloam gloam in...
繼承與初始化
當存在繼承的情況時,各變數的初始化情況變得更為複雜了 不關區域性變數的事 我們有必要梳理一下。class insect private static int x1 printinit static insect.x1 initialized public int x2 printinit shape...