總之一句話,靜態**塊內容先執行,接著執行父類非靜態**塊和構造方法,然後執行子類非靜態**塊和構造方法。
注意:子類的構造方法,不管這個構造方法帶不帶引數,預設的它都會先去尋找父類的不帶引數的構造方法。如果父類沒有不帶引數的構造方法,那麼子類必須用supper關鍵子來呼叫父類帶引數的構造方法,否則編譯不能通過。
加入了子類以後,執行順序有了新的變化,我們可以總結一下。首先第一部分執行的是父類的靜態**塊—子類的靜態**塊—主程式。這一部分都是執行一次,與建立多少物件沒有關係。第二部分new了乙個父類物件,並呼叫了方法。執行了它的非靜態**塊—建構函式—一般方法。第三部分new了乙個子類的物件,並呼叫了方法。執行順序為父類的非靜態**塊—父類的無參建構函式,然後是子類的非靜態**塊—子類建構函式—子類的方法。
如果b類繼承自a類,在main方法中new出b的物件(不帶引數),那麼他執行的順序是:
父類a的靜態方法-->
類b的靜態方法-->
父類a的非靜態方法(不指定方法名)-->父類a的無參構造-->
這個時候在父類無參構造裡面呼叫了父類的print方法,兩種可能
1.如果子類沒有相應的print方法,那麼直接呼叫父類的print方法。
2.如果子類重寫了父類的print方法,那麼不會呼叫父類的print,優先呼叫子類的print方法,但是仍然可以在子類的print方法裡面使用super呼叫父類的print方法。
-->
子類b的非靜態方法(不指定方法名)-->子類b的無參構造方法
這裡註明一點,如果在new出b物件的時候帶上引數,那麼大致仍然是上面的流程,只是會呼叫父類的無參構造(所以在new子類物件的時候,不管帶不帶引數,都一定會執行父類的無參構造),而後子類則是呼叫有參構造方法。
初始化 MyBatis初始化之載入初始化
在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...
java類的載入以及初始化順序
類的載入和初始化的了解對於我們對程式設計的理解有很大幫助,最近在看類的記載方面的問題。從網上查閱了若干文章,現總結如下 我們通過一段 來了解類載入和初始化的順序 package com.classloader.demo class insect private int p print insect....
java類的載入以及初始化順序
類的載入和初始化的了解對於我們對程式設計的理解有很大幫助,最近在看類的記載方面的問題。從網上查閱了若干文章,現總結如下 我們通過一段 來了解類載入和初始化的順序 package com.classloader.demo class insect private int p print insect....