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