更新時間:2020-07-20 15:13:51 來源:動力節(jié)點 瀏覽2632次
1、一道類加載的問題,一個類,在類加載之后,如果對類的內(nèi)容進(jìn)行修改,如何在不重新啟動虛擬機(jī)的情況下,加載已經(jīng)變化過的類
你可以創(chuàng)建個新的class loader,然后用loadClass加載,再newInstance;原來加載的classloader是不能重新加載的;這算是一個典型的容器思路。
2、對java“書寫一次,到處運(yùn)行”(Write once,run anywhere)的理解?
一次編譯、到處運(yùn)行”說的是Java語言跨平臺的特性,Java的跨平臺特性與Java虛擬機(jī)的存在密不可分,可在不同的環(huán)境中運(yùn)行。比如說Windows平臺和Linux平臺都有相應(yīng)的JDK,安裝好JDK后也就有了Java語言的運(yùn)行環(huán)境。其實Java語言本身與其他的編程語言沒有特別大的差異,并不是說Java語言可以跨平臺,而是在不同的平臺都有可以讓Java語言運(yùn)行的環(huán)境而已,所以才有了Java一次編譯,到處運(yùn)行這樣的效果。
嚴(yán)格的講,跨平臺的語言不止Java一種,但Java是較為成熟的一種。“一次編譯,到處運(yùn)行”這種效果跟編譯器有關(guān)。編程語言的處理需要編譯器和解釋器。Java虛擬機(jī)和DOS類似,相當(dāng)于一個供程序運(yùn)行的平臺。
程序從源代碼到運(yùn)行的三個階段:編碼——編譯——運(yùn)行——調(diào)試。Java在編譯階段則體現(xiàn)了跨平臺的特點。編譯過程大概是這樣的:首先是將Java源代碼轉(zhuǎn)化成.CLASS文件字節(jié)碼,這是第一次編譯。.class文件就是可以到處運(yùn)行的文件。然后Java字節(jié)碼會被轉(zhuǎn)化為目標(biāo)機(jī)器代碼,這是是由JVM來執(zhí)行的,即Java的第二次編譯。“到處運(yùn)行”的關(guān)鍵和前提就是JVM。
Java代碼的整個生命周期如圖:
3、談?wù)勀銓ava平臺的理解?“Java是解釋執(zhí)行”,這句話正確嗎?
Java本身是一種面向?qū)ο蟮恼Z言,最顯著的特性有兩個方面,一是所謂的“書寫一次,到處運(yùn)行”(Write once,run anywhere),能夠非常容易地獲得跨平臺能力;另外就是垃圾收集(GC,Garbage Collection),Java通過垃圾收集器(Garbage Collector)回收分配內(nèi)存,大部分情況下,程序員不需要自己操心內(nèi)存的分配和回收。
對于“Java是解釋執(zhí)行”這句話,這個說法不太準(zhǔn)確。我們開發(fā)的Java的源代碼,首先通過Javac編譯成為字節(jié)碼(bytecode),然后,在運(yùn)行時,通過Java虛擬機(jī)(JVM)內(nèi)嵌的解釋器將字節(jié)碼轉(zhuǎn)換成為最終的機(jī)器碼。但是常見的JVM,比如我們大多數(shù)情況使用的Oracle JDK提供的Hotspot JVM,都提供了JIT(Just-In-Time)編譯器,也就是通常所說的動態(tài)編譯器,JIT能夠在運(yùn)行時將熱點代碼編譯成機(jī)器碼,這種情況下部分熱點代碼就屬于編譯執(zhí)行,而不是解釋執(zhí)行了。
4、請對比Exception和Error,另外,運(yùn)行時異常與一般異常有什么區(qū)別?
Exception和Error都是繼承了Throwable類,在Java中只有Throwable類型的實例才可以被拋出(throw)或者捕獲(catch),它是異常處理機(jī)制的基本組成類型。
Exception和Error體現(xiàn)了Java平臺設(shè)計者對不同異常情況的分類。Exception是程序正常運(yùn)行中,可以預(yù)料的意外情況,可能并且應(yīng)該被捕獲,進(jìn)行相應(yīng)處理。
Error是指在正常情況下,不大可能出現(xiàn)的情況,絕大部分的Error都會導(dǎo)致程序(比如JVM自身)處于非正常的、不可恢復(fù)狀態(tài)。既然是非正常情況,所以不便于也不需要捕獲,常見的比如OutOfMemoryError之類,都是Error的子類。
Exception又分為可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源代碼里必須顯式地進(jìn)行捕獲處理,這是編譯期檢查的一部分。
5、下面的代碼反映了異常處理中哪些不當(dāng)之處?
try?{
//?業(yè)務(wù)代碼
//?…
Thread.sleep(1000L);
}?catch?(Exception?e)?{
//?Ignore?it
}
以上就是動力節(jié)點java培訓(xùn)機(jī)構(gòu)的小編針對“面試必備,基礎(chǔ)Java技術(shù)面試題”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀