關(guān)于java面試題基礎(chǔ),JAVA面試題這個(gè)問題很多朋友還不知道,今天小六來為大家解答以上的問題,現(xiàn)在讓我們一起來看看吧!
1、這個(gè)是類的初始化順序問題 類只有在使用New調(diào)用創(chuàng)建的時(shí)候才會(huì)被JAVA類裝載器裝入 2、JAVA類首次裝入時(shí),會(huì)對(duì)靜態(tài)成員變量或方法進(jìn)行一次初始化,但方法不被調(diào)用是不會(huì)執(zhí)行的,靜態(tài)成員變量和靜態(tài)初始化塊級(jí)別相同,非靜態(tài)成員變量和非靜態(tài)初始化塊級(jí)別相同。
2、 先初始化父類的靜態(tài)代碼--->初始化子類的靜態(tài)代碼--> 初始化父類的非靜態(tài)代碼--->初始化父類構(gòu)造函數(shù)---> 初始化子類非靜態(tài)代碼--->初始化子類構(gòu)造函數(shù) 3、創(chuàng)建類實(shí)例時(shí),首先按照父子繼承關(guān)系進(jìn)行初始化 4、類實(shí)例創(chuàng)建時(shí)候,首先初始化塊部分先執(zhí)行,然后是構(gòu)造方法;然后從 本類繼承的子類的初始化塊執(zhí)行,最后是子類的構(gòu)造方法 上例中類A類B都有靜態(tài)代碼static 從main函數(shù)開始: System.out.println(" "); 輸出空格 A ab = new B(); 聲明為類A但初始化為類B 因?yàn)榫幾g器是從左向右進(jìn)行的,所以先是A ab; 執(zhí)行System.out.print("1"); 因?yàn)闆]有new A(); 所以不執(zhí)行類A的構(gòu)造函數(shù).那為什么會(huì)輸出2呢? 是因?yàn)锽類是繼承A類的,所是在執(zhí)行new B(); 的時(shí)候,執(zhí)行順序是初始化System.out.print("a"); 然后先父類后子類,static代碼只執(zhí)行一次(已執(zhí)行過); 執(zhí)行System.out.print("2"); 執(zhí)行System.out.print("b"); 執(zhí)行System.out.println(" "); 之后是ab = new B(); A,B中的static都已被執(zhí)行過, 所以只執(zhí)行構(gòu)造函數(shù),因B類有父類A,所以先執(zhí)行A 類的構(gòu) 造函數(shù)System.out.print("2"); 再執(zhí)行B類的構(gòu)造函數(shù) System.out.print("b");。
本文分享完畢,希望對(duì)大家有所幫助。
標(biāo)簽:
免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!