參考資料《Java 編程思想》,關于含有基類的導出類,其成員的初始化過程是一個容易讓人困惑的地方,下面通過具體的實例進行講解,代碼取自《Java 編程思想》,代碼如下:
成都創新互聯專注于企業營銷型網站建設、網站重做改版、東河網站定制設計、自適應品牌網站建設、H5高端網站建設、商城網站建設、集團公司官網建設、成都外貿網站制作、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為東河等各大城市提供網站開發制作服務。
import static net.mindview.util.Print.*; /** * All rights Reserved, Designed By www.tydic.com * * @project: MyExerciseProject * @Title: Beetle.java * @Package: * @Description: TODO(Learn java) * @Author: Yang Xiaoyong * @Date: 2017年10月30日 下午4:22:19 * @Version: V1.0 * @Copyright: 2017 Inc. All rights reserved. 注意:本內容僅限于學習交流使用,禁止外泄以及用于其他的商業目的 */ public class Beetle extends Insect { private int k = printInit("Beetle.k Initialized"); Beetle() { // TODO Auto-generated constructor stub print("k = " + k); print("j = " + j); } private static int x2 = printInit("static Beetle.x2 initialized"); public static void main(String[] args) { print("Beetle constructor"); Beetle beetle = new Beetle(); } } class Insect { private int i = 9; protected int j; Insect() { // TODO Auto-generated constructor stub print("i = " + i + ". j = " + j); j = 39; } private static int x1 = printInit("static Insert.x1 initialized"); static int printInit(String s) { print(s); return 47; } }
程序輸出結果為:
則UML類圖為:
則Beetle
是導出類,Insect
是基類,當程序試圖從main()函數入口點進入,下面是運行過程:
至此,完成類的加載過程。然后,可以進行對象的創建。
對程序輸出結果進行分析:因為靜態成員變量在類加載的時候進行初始化,而在運行main()
函數之前,完成加載類的過程。所以在執行main()函數之前,x1, x2已經完成初始化過程,注意此時初始化過程是一個從基類“向外”擴散的,類似導出類的構造器的構建過程。輸出如下:
static Insert.x1 initialized
static Beetle.x2 initialized
之后,在創建Beetle
的過程中,其基類的構造器會被自動調用,所以首先執行Inspect構造器里面的內容,完成print()
函數,并對j的變量賦值。最后,調用Beetle類自身的構造器進行對象的創建,最終輸出符合分析。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創新互聯的支持。如果你想了解更多相關內容請查看下面相關鏈接
分享標題:Java關于含有繼承類的成員初始化過程講解
網站鏈接:http://m.newbst.com/article6/jpjjog.html
成都網站建設公司_創新互聯,為您提供移動網站建設、服務器托管、網頁設計公司、用戶體驗、Google、網站維護
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯