更新時(shí)間:2020-05-28 16:11:17 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2963次
在Java面試問(wèn)題中最常被問(wèn)及的就是Java異常如何處理,今天小編就和大家一起來(lái)探討一下Java異常如何處理。
1.Java中的檢查型異常和非檢查型異常有什么區(qū)別?
這是一個(gè)非常流行的Java異常面試題,會(huì)出現(xiàn)在各種層次的Java面試中。檢查型異常和非檢查型異常的主要區(qū)別在于其處理方式。檢查型異常需要使用try,catch和finally關(guān)鍵字在編譯期進(jìn)行處理,否則會(huì)出現(xiàn)編譯器會(huì)報(bào)錯(cuò)。對(duì)于非檢查型異常則不需要這樣做。Java中所有繼承自java.lang.Exception類(lèi)的異常都是檢查型異常,所有繼承自RuntimeException的異常都被稱(chēng)為非檢查型異常。
2.Java中什么是Exception?
這個(gè)問(wèn)題經(jīng)常在第一次問(wèn)有關(guān)異常的時(shí)候或者是面試菜鳥(niǎo)的時(shí)候問(wèn)。從來(lái)沒(méi)見(jiàn)過(guò)面高級(jí)或者資深工程師的時(shí)候有人問(wèn)這玩意,但是對(duì)于菜鳥(niǎo),是很愿意問(wèn)這個(gè)的。簡(jiǎn)單來(lái)說(shuō),異常是Java傳達(dá)給你的系統(tǒng)和程序錯(cuò)誤的方式。在Java中,異常功能是通過(guò)實(shí)現(xiàn)比如Throwable,Exception,RuntimeException之類(lèi)的類(lèi),然后還有一些處理異常時(shí)候的關(guān)鍵字,比如throw,throws,try,catch,finally之類(lèi)的。所有的異常都是通過(guò)Throwable衍生出來(lái)的。Throwable把錯(cuò)誤進(jìn)一步劃分為java.lang.Exception和java.lang.Error.java.lang.Error用來(lái)處理系統(tǒng)錯(cuò)誤,例如
java.lang.StackOverFlowError或者
Java.lang.OutOfMemoryError之類(lèi)的。然后Exception用來(lái)處理程序錯(cuò)誤,請(qǐng)求的資源不可用等等。
3.在Java異常處理的過(guò)程中,你遵循的最好的實(shí)踐是什么?
這個(gè)問(wèn)題在面試技術(shù)經(jīng)理是非常常見(jiàn)的一個(gè)問(wèn)題。因?yàn)楫惓L幚碓陧?xiàng)目設(shè)計(jì)中是非常關(guān)鍵的,所以精通異常處理是十分必要的。異常處理有很多最佳實(shí)踐,下面列舉集中,它們提高你代碼的健壯性和靈活性:
1)調(diào)用方法的時(shí)候返回布爾值來(lái)代替返回null,這樣可以NullPointerException。由于空指針是java異常里最?lèi)盒牡漠惓!?/p>
2)catch塊里別不寫(xiě)代碼。空catch塊是異常處理里的錯(cuò)誤事件,因?yàn)樗皇遣东@了異常,卻沒(méi)有任何處理或者提示。通常你起碼要打印出異常信息,當(dāng)然你最好根據(jù)需求對(duì)異常信息進(jìn)行處理。
3)能拋受控異常(checked Exception)就盡量不拋非受控異常(unchecked Exception)。通過(guò)去掉重復(fù)的異常處理代碼,可以提高代碼的可讀性。
4)絕對(duì)不要讓你的數(shù)據(jù)庫(kù)相關(guān)異常顯示到客戶(hù)端。由于絕大多數(shù)數(shù)據(jù)庫(kù)和SQLException異常都是受控異常,在Java中,你應(yīng)該在DAO層把異常信息處理,然后返回處理過(guò)的能讓用戶(hù)看懂并根據(jù)異常提示信息改正操作的異常信息。
5)在Java中,一定要在數(shù)據(jù)庫(kù)連接,數(shù)據(jù)庫(kù)查詢(xún),流處理后,在finally塊中調(diào)用close()方法。
4.Java中的NullPointerException和
ArrayIndexOutOfBoundException之間有什么相同之處?
在Java異常面試中這并不是一個(gè)很流行的問(wèn)題,但會(huì)出現(xiàn)在不同層次的初學(xué)者面試中,用來(lái)測(cè)試應(yīng)聘者對(duì)檢查型異常和非檢查型異常的概念是否熟悉。順便說(shuō)一下,該題的答案是,這兩個(gè)異常都是非檢查型異常,都繼承自RuntimeException。該問(wèn)題可能會(huì)引出另一個(gè)問(wèn)題,即Java和C的數(shù)組有什么不同之處,因?yàn)镃里面的數(shù)組是沒(méi)有大小限制的,絕對(duì)不會(huì)拋出
ArrayIndexOutOfBoundException。
5.既然我們可以用RuntimeException來(lái)處理錯(cuò)誤,那么你認(rèn)為為什么Java中還存在檢查型異常?
這是一個(gè)有爭(zhēng)議的問(wèn)題,在回答該問(wèn)題時(shí)你要小心。雖然他們肯定愿意聽(tīng)到你的觀點(diǎn),但其實(shí)他們最感興趣的還是有說(shuō)服力的理由。其中一個(gè)理由是,存在檢查型異常是一個(gè)設(shè)計(jì)上的決定,受到了諸如C++等比Java更早的編程語(yǔ)言設(shè)計(jì)經(jīng)驗(yàn)的影響。絕大多數(shù)檢查型異常位于java.io包內(nèi),這是合乎情理的,因?yàn)樵谀阏?qǐng)求了不存在的系統(tǒng)資源的時(shí)候,一段強(qiáng)壯的程序必須能夠優(yōu)雅的處理這種情況。通過(guò)把IOException聲明為檢查型異常,Java確保了你能夠優(yōu)雅的對(duì)異常進(jìn)行處理。另一個(gè)可能的理由是,可以使用catch或finally來(lái)確保數(shù)量受限的系統(tǒng)資源(比如文件描述符)在你使用后盡早得到釋放。
Java技術(shù)相關(guān)文檔
Java異常簡(jiǎn)介:http://www.ilovecolors.com.cn/tutorial_java_advance/613.html
Java異常處理:http://www.ilovecolors.com.cn/tutorial_java_advance/614.html
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“面試經(jīng)常遇到的問(wèn)題:Java異常處理過(guò)程”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)