2020年Java面試題及答案匯總

2020年Java面試題及答案匯總

天津卓眾教育      2022-05-06 11:49:01     51

2020年Java面試題及答案匯總,  如今正是金三銀四的好時(shí)機(jī),企業(yè)招聘已經(jīng)陸續(xù)開始了,小編在這關(guān)鍵時(shí)刻為你匯總Java面試題,有了小編的面試法寶讓你參加Java

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹


  如今正是金三銀四的好時(shí)機(jī),企業(yè)招聘已經(jīng)陸續(xù)開始了,小編在這關(guān)鍵時(shí)刻為你匯總Java面試題,有了小編的面試法寶讓你參加Java面試更輕松。



  什么情況下會(huì)觸發(fā)類的初始化?


  (1)、遇到 new, getstatic, putstatic, invokestatic 這4條字節(jié)碼指令。


  (2)、使用 java.lang.reflect 包的方法對(duì)類進(jìn)行反射調(diào)用。


  (3)、初始化一個(gè)類的時(shí)候,如果發(fā)現(xiàn)其父類還沒有進(jìn)行過初始化,則先初始化其父類(注意:


  如果是接口的話,則不要求初始化父類)。


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


  (5)、當(dāng)使用JDK 1.7 的動(dòng)態(tài)語言支持時(shí),如果一個(gè) java.lang.invoke.MethodHandle 實(shí)例最后的解析結(jié)果 REF_getstatic, REF_putstatic, REF_invokeStatic的方法句柄,并且這個(gè)方法句柄所對(duì)應(yīng)的類沒有進(jìn)行過初始化,則先觸發(fā)其初始化。


  外加幾種不會(huì)初始化的例子:


  (1)、同類子類引用父類的靜態(tài)字段,不會(huì)導(dǎo)致子類初始化。至于是否會(huì)觸發(fā)子類的加載和驗(yàn)證,則取決于虛擬機(jī)的具體實(shí)現(xiàn)。


  (2)、通過數(shù)組定義來引用類,也不會(huì)觸發(fā)類的初始化。例如下面這個(gè)語句:


  1Animal[] a = new Animao[10];


  并不會(huì)觸發(fā) Animal 類的初始化。


  (3)、引用一個(gè)類的常量也不會(huì)觸發(fā)初始化。


  談?wù)勀銓?duì)解析與分派的認(rèn)識(shí)。


  1.方法在程序真正運(yùn)行之前就有一個(gè)可確定的調(diào)用版本,并且這個(gè)方法的調(diào)用版本在運(yùn)行期間是不可變的,即“編譯時(shí)可知,運(yùn)行不可以變”,這類目標(biāo)的方法的調(diào)用稱之為解析。


  Java 語言中符合“編譯器可知,運(yùn)行期不可變”這個(gè)要求的方法,主要包括靜態(tài)方法和私有方法兩大類。


  2.解析調(diào)用一定是個(gè)靜態(tài)的過程,在編譯期就完全確定,在類加載的解析階段就將涉及的符號(hào)引用全部轉(zhuǎn)變?yōu)榭梢源_定的直接引用,不會(huì)延遲到運(yùn)行期再去完成。而分派(Dispatch)調(diào)用則可能是靜態(tài)的也可能是動(dòng)態(tài)的。于是分派方式就有靜態(tài)分派和動(dòng)態(tài)分派。


  如何?定義?個(gè)類加載器?你使?過哪些或者你在什么場(chǎng)景下需要?個(gè)?定義的類加載器嗎?


  可以把自己自定義的類加載器繼承 ClassLoader,然后重寫 findClass() 方法,把自己的類加載邏輯寫到 findClass() 方法中去。


  使用類加載器的場(chǎng)景:


  加載特定路徑的 class 文件


  熱部署加載 class 文件


  從網(wǎng)絡(luò)中加載一個(gè)加密的 class 文件


  java中 == 和equals() 和 hashCode() 的區(qū)別


  (1)、== 是運(yùn)算符,a == b 比較的是 a,b的數(shù)值是否相等。


  (2)、equals 是 Object 類的一個(gè)方法,默認(rèn)情況下比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象,內(nèi)部的實(shí)現(xiàn)是通過 == 來比較兩個(gè)對(duì)象的內(nèi)存地址是否相等,其源碼如下


  1 public boolean equals(Object obj) {2 return (this == obj);3 }


  如果想比較兩個(gè)對(duì)象的其他內(nèi)容,則可以通過重寫 equals方法,例如 String 類就重寫了 equals 方法,改成了對(duì)象的內(nèi)容是否相等。


  (3)、hashCode 也是Object 類的一個(gè)方法,返回值是該對(duì)象的哈希碼,同一個(gè)對(duì)象的哈希碼一定相等,但不同對(duì)象的哈希碼也是有可能相等的。


  (4)、hashCode() 與 equals() 的關(guān)系:如果兩個(gè)對(duì)象根據(jù) equals() 方法比較相等,那么這兩個(gè)對(duì)象的 hashCode() 返回值一定相等;如果兩個(gè)對(duì)象根據(jù) equals() 方法比較不相等,那么這兩個(gè)對(duì)象的 hashCode() 返回值不一定不相等


  int與integer的區(qū)別


  int 是一個(gè)基本數(shù)值類型,Integer 是一個(gè)對(duì)象,Integer 是 int 的一個(gè)包裝類型,兩者可以通過拆箱和裝箱自動(dòng)轉(zhuǎn)換。


  拓展一下:


  1Integer a, b;


  對(duì)于 a == b,比較的是 a 與 b 是否是同一個(gè)對(duì)象,但是如果運(yùn)算符 == 左右兩邊算術(shù)運(yùn)算的話,則 a,b會(huì)自動(dòng)拆箱成 int 類型來進(jìn)行比較。



  以上就是天津卓眾教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年Java面試題及答案匯總”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。


Java面試題

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。