JAVA面试常考系列五
轉(zhuǎn)載自?JAVA面試常考系列五
題目一
串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么?
????吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等規(guī)模和大規(guī)模數(shù)據(jù)的應(yīng)用程序。
????串行收集器對(duì)大多數(shù)的小應(yīng)用(在現(xiàn)代處理器上需要大概100M左右的內(nèi)存)就足夠了。
?
題目二在Java中,對(duì)象什么時(shí)候可以被垃圾回收?
????當(dāng)對(duì)象對(duì)當(dāng)前使用這個(gè)對(duì)象的應(yīng)用程序變得不可觸及的時(shí)候,這個(gè)對(duì)象就可以被回收了。java垃圾回收是有jvm自動(dòng)執(zhí)行的,不是人為操作的,所以當(dāng)不存在對(duì)某對(duì)象的任何引用時(shí),該對(duì)象就處于被jvm回收的狀態(tài),并不是馬上予以銷毀。
題目三
JVM的永久代中會(huì)發(fā)生垃圾回收么?
????垃圾回收不會(huì)發(fā)生在永久代。如果永久代滿了或者是超過(guò)了臨界值,會(huì)觸發(fā)完全垃圾回收(Full GC)。永久代也是被回收的,所以,正確的永久代大小對(duì)避免Full GC是非常重要的因素。
題目四
Java中的兩種異常類型是什么?他們有什么區(qū)別?
Java中有兩種異常:受檢查的(checked)異常和不受檢查的(unchecked)異常。
不受檢查的異常不需要在方法或者是構(gòu)造函數(shù)上聲明,就算方法或者是構(gòu)造函數(shù)的執(zhí)行可能會(huì)拋出這樣的異常,并且不受檢查的異常可以傳播到方法或者是構(gòu)造函數(shù)的外面。相反,受檢查的異常必須要用throws語(yǔ)句在方法或者是構(gòu)造函數(shù)上聲明。?
題目五
Java中Exception和Error有什么區(qū)別?
Error類定義了不期望被用戶程序捕獲的異常,表示僅靠程序本身無(wú)法恢復(fù)的嚴(yán)重錯(cuò)誤,比如說(shuō)內(nèi)存溢出、動(dòng)態(tài)鏈接異常、虛擬機(jī)錯(cuò)誤。應(yīng)用程序不應(yīng)該拋出這種類型的對(duì)象。假如出現(xiàn)這種錯(cuò)誤,除了盡力使程序安全退出外,在其他方面是無(wú)能為力的。所以在進(jìn)行程序設(shè)計(jì)時(shí),應(yīng)該更關(guān)注Exception類。
Exception類用于用戶程序可以捕獲的異常情況,是由Java應(yīng)用程序拋出和處理的非嚴(yán)重錯(cuò)誤,比如所需文件沒(méi)有找到、零作除數(shù),數(shù)組下標(biāo)越界等。它的各種不同子類分別對(duì)應(yīng)不同類型異常。可分為兩類:Checked異常和Runtime異常
題目六
throw和throws有什么區(qū)別?
????1.throw是在代碼塊內(nèi)針對(duì)對(duì)象的,即在捕獲方法內(nèi)的異常并拋出時(shí)使用。throws是針對(duì)方法的,即將方法的異常信息拋出去。
????2.throw是主動(dòng)(在方法內(nèi)容里我們是主動(dòng)捕獲并throw的),而throws是被動(dòng)(在方法上是沒(méi)有捕獲異常進(jìn)行處理,直接throws的)。
題目七
異常處理的時(shí)候,finally代碼塊的重要性是什么?
????無(wú)論是否拋出異常,finally代碼塊總是會(huì)被執(zhí)行。就算是沒(méi)有catch語(yǔ)句同時(shí)又拋出異常的情況下,finally代碼塊仍然會(huì)被執(zhí)行。最后要說(shuō)的是,finally代碼塊主要用來(lái)釋放資源,比如:I/O緩沖區(qū),數(shù)據(jù)庫(kù)連接。
題目八
異常處理完成以后,Exception對(duì)象何時(shí)回收?
Exception對(duì)象會(huì)在下一個(gè)垃圾回收過(guò)程中被回收掉。
?
題目九finally代碼塊和finalize()方法各有什么作用,區(qū)別是什么?
finally:在異常處理時(shí)提供?finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。
finalize:方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。注意:finalize不一定被jvm調(diào)用,只有當(dāng)垃圾回收器要清除垃圾時(shí)才被調(diào)用。
區(qū)別:
無(wú)論是否拋出異常,finally代碼塊都會(huì)執(zhí)行,它主要是用來(lái)釋放應(yīng)用占用的資源。finalize()方法是Object類的一個(gè)protected方法,它是在對(duì)象被垃圾回收之前由Java虛擬機(jī)來(lái)調(diào)用的。
?
題目十什么是Applet?
Applet是一種特殊的Java程序,它本身不能單獨(dú)運(yùn)行,需要嵌入在一個(gè)HTML文件中,借助瀏覽器或Appletviewer來(lái)解釋執(zhí)行.Applet可能通過(guò)網(wǎng)絡(luò)傳輸,由瀏覽器自動(dòng)裝載并執(zhí)行。
總結(jié)
以上是生活随笔為你收集整理的JAVA面试常考系列五的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2018imac笔记本电脑配置详解?
- 下一篇: JAVA面试常考系列六