成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

總結(jié)一個(gè)某東的面試題 --- java類(lèi)的初始化時(shí)機(jī)

Vixb / 1652人閱讀

摘要:今天去某東面試一個(gè)特基礎(chǔ)特簡(jiǎn)單的問(wèn)題竟然一不小心腦子短路給答錯(cuò)了,太懊惱了,記下以至警告問(wèn)題如下現(xiàn)有基類(lèi),的構(gòu)造函數(shù)中輸出,中有一靜態(tài)塊內(nèi)輸出,的一個(gè)派生類(lèi)的構(gòu)造函數(shù)中輸出類(lèi)中的靜態(tài)塊中輸出。

今天去某東面試一個(gè)特基礎(chǔ)特簡(jiǎn)單的問(wèn)題竟然一不小心腦子短路給答錯(cuò)了,太懊惱了,記下以至警告:

問(wèn)題如下:

現(xiàn)有基類(lèi)A,A的構(gòu)造函數(shù)中輸出“A Instance”,A中有一靜態(tài)塊內(nèi)輸出“A init”,A的一個(gè)派生類(lèi)B的構(gòu)造函數(shù)中輸出“B instance”, B類(lèi)中的靜態(tài)塊中輸出“B init”。問(wèn):A a = new B(); 輸出結(jié)果及正確的順序?
public class A{
    static{
        System.out.println("A init");
    }
    public A(){
        System.out.println("A Instance");
    }
}

public class B extends A{
    static{
        System.out.println("B init");
    }
    public B(){
        System.out.println("B Instance");
    }
}

如果是這樣呢:A[] sca = new B[10]; 這是什么也不會(huì)輸出的。

總結(jié)一些其他的情況:

public class SuperClass{
    static{
        System.out.println("SuperClass init");
    }
    
    public static int value = 123;
}
public class SubClass extends SuperClass{
    static{
        System.out.println("SubClass init");
    }
    
    public static final String HELLOWORD = "hellow word";
}

public class NotInitialization{
    public static void main(String[] args){
        
        /**
        * 這里只會(huì)輸出“SuperClass init”, 而不會(huì)輸出“SubClass init”. 
        * 對(duì)于靜態(tài)字段,只有直接定義這個(gè)字段的類(lèi)才會(huì)被初始化
        * 因此通過(guò)子類(lèi)引用父類(lèi)中定義的靜態(tài)字段,只會(huì)觸發(fā)父類(lèi)的初始化不會(huì)觸發(fā)子類(lèi)的初始化   
        */
        System.out.println(SubClass.value);
        
        /*
        * 這里也不會(huì)輸出“SubClass init”, 
        * 這里因?yàn)殡m然在Java源代碼中引用了SubClass類(lèi)中的常量HELLOWORD, 
        * 但是在編譯階段通過(guò)常量傳播優(yōu)化,
        * 已經(jīng)將此常量的值“hellow word”放到了NotInitialization類(lèi)的常量池中,
        * 以后NotInitialization對(duì)常量 SubClass.HELLWORD 的引用實(shí)際都被轉(zhuǎn)化為NotInitialization類(lèi)對(duì)自身常量池的引用了
        */
        System.out.println(SubClass.HELLOWORD);
    
    }
}

總結(jié):

對(duì)于類(lèi)的初始化虛擬機(jī)規(guī)范中明確指出有且只有一下五中情況會(huì)立即執(zhí)行對(duì)類(lèi)的初始化:
1、遇到 new、getstatic、putstatic或invokestatic 著四條指令時(shí),這四條指令分別代表:
    使用new關(guān)鍵字實(shí)例化對(duì)象、讀取或設(shè)置靜態(tài)字段、調(diào)用一個(gè)類(lèi)的靜態(tài)方法。
    
2、使用jav.lang.reflect包中的方法對(duì)類(lèi)進(jìn)行反射調(diào)用。

3、當(dāng)初始化一個(gè)類(lèi)的時(shí)候,如果該類(lèi)的父類(lèi)沒(méi)有初始化,則需要先初始化起父類(lèi)

4、當(dāng)虛擬機(jī)啟動(dòng)時(shí),用戶需要指定一個(gè)要執(zhí)行的主類(lèi)(包括main()方法的那個(gè)類(lèi)),虛擬機(jī)會(huì)先初始化這個(gè)主類(lèi)

5、使用jdk1.7的動(dòng)態(tài)語(yǔ)言支持時(shí),如果一個(gè)java.lang.MethodHandle實(shí)例最后的解析結(jié)果是:REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,且這個(gè)方法句柄所對(duì)應(yīng)的類(lèi)沒(méi)有初始化則需要先觸發(fā)其初始化

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/64895.html

相關(guān)文章

  • JAVA面試(45)

    摘要:本文首發(fā)于的博客轉(zhuǎn)載請(qǐng)注明出處與的區(qū)別作用對(duì)象是類(lèi)的靜態(tài)方法,作用于當(dāng)前線程是類(lèi)的成員方法,作用于對(duì)象本身作用調(diào)用方法,線程進(jìn)入休眠狀態(tài)調(diào)用方法,線程進(jìn)入阻塞狀態(tài)鎖的釋放不會(huì)釋放持有的鎖會(huì)釋放鎖喚醒自然喚醒或者顯式調(diào)用方法調(diào)用或者方法調(diào)用不 ????本文首發(fā)于cartoon的博客????轉(zhuǎn)載請(qǐng)注明出處:https://cartoonyu.github.io/c... java sl...

    Allen 評(píng)論0 收藏0
  • 類(lèi)的加載機(jī)制,雙親委派模型,搞定大廠高頻面試

    摘要:驗(yàn)證驗(yàn)證是連接階段的第一步,這一階段的目的是為了確保文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會(huì)危害虛擬機(jī)自身的安全。字節(jié)碼驗(yàn)證通過(guò)數(shù)據(jù)流和控制流分析,確定程序語(yǔ)義是合法的符合邏輯的。 看過(guò)這篇文章,大廠面試你「雙親委派模型」,硬氣的說(shuō)一句,你怕啥? 讀該文章姿勢(shì) 打開(kāi)手頭的 IDE,按照文章內(nèi)容及思路進(jìn)行代碼跟蹤與思考 手頭沒(méi)有 IDE,先收藏,回頭看 (萬(wàn)一哪次面試問(wèn)...

    Object 評(píng)論0 收藏0
  • 金三銀四,2019大廠Android高級(jí)工程師面試整理

    摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會(huì)問(wèn)到混合開(kāi)發(fā)的知識(shí),至于我為什么傾向于混合開(kāi)發(fā),我的一句話就是走上編程之路,將來(lái)你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...

    tracymac7 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<