日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java异常面试问题

發(fā)布時間:2023/12/3 java 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java异常面试问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自? ?Java異常面試問題

1.什么是Java中的異常?

異常是在程序執(zhí)行期間可能發(fā)生的錯誤事件,并且會中斷它的正常流程。異??赡軄碜圆煌愋偷那闆r,例如用戶輸入的錯誤數(shù)據(jù),硬件故障,網(wǎng)絡(luò)連接故障等。

每當(dāng)執(zhí)行java語句時發(fā)生任何錯誤,都會創(chuàng)建一個異常對象,然后JRE會嘗試查找異常處理程序來處理異常。如果找到合適的異常處理程序,則將異常對象傳遞給處理程序代碼以處理異常,稱為捕獲異常。如果未找到處理程序,則應(yīng)用程序?qū)惓伋龅竭\(yùn)行時環(huán)境,JRE將終止該程序。

Java異常處理框架僅用于處理運(yùn)行時錯誤,編譯時錯誤不由異常處理框架處理。

?

2.Java中的異常處理關(guān)鍵字是什么?

java異常處理中使用了四個關(guān)鍵字。

throw:有時我們明確要創(chuàng)建異常對象然后拋出它來停止程序的正常處理。throw關(guān)鍵字用于向運(yùn)行時拋出異常來處理它。

throws:當(dāng)我們在方法中拋出任何已檢查的異常而不處理它時,我們需要在方法簽名中使用throws關(guān)鍵字讓調(diào)用者程序知道該方法可能拋出的異常。調(diào)用方法可以處理這些異常或使用throws關(guān)鍵字將其傳播給它的調(diào)用方法。我們可以在throws子句中提供多個異常,也可以與main()方法一起使用。

try-catch:我們在代碼中使用try-catch塊進(jìn)行異常處理。try是塊的開始,catch是在try塊的末尾處理異常。我們可以使用try有多個catch塊,try-catch塊也可以嵌套。catch塊需要一個應(yīng)該是Exception類型的參數(shù)。

finally:finally塊是可選的,只能用于try-catch塊。由于異常會暫停執(zhí)行過程,因此我們可能會打開一些不會關(guān)閉的資源,因此我們可以使用finally塊。finally塊總是被執(zhí)行,無論是否發(fā)生異常。

?

3.解釋Java異常層次結(jié)構(gòu)?

Java異常是分層的,繼承用于對不同類型的異常進(jìn)行分類。Throwable是Java Exceptions Hierarchy的父類,它有兩個子對象 - Error和Exception。異常進(jìn)一步分為檢查異常和運(yùn)行時異常。

錯誤是超出應(yīng)用程序范圍的特殊情況,并且無法預(yù)測并從中恢復(fù),例如硬件故障,JVM崩潰或內(nèi)存不足錯誤。

Checked Exceptions是我們可以在程序中預(yù)期并嘗試從中恢復(fù)的特殊情況,例如FileNotFoundException。我們應(yīng)該捕獲此異常并向用戶提供有用的消息并正確記錄以進(jìn)行調(diào)試。Exception是所有Checked Exceptions的父類。

運(yùn)行時異常是由錯誤的編程引起的,例如嘗試從Array中檢索元素。我們應(yīng)該在嘗試檢索元素之前先檢查數(shù)組的長度,否則它可能會ArrayIndexOutOfBoundException在運(yùn)行時拋出。RuntimeException是所有運(yùn)行時異常的父類。

?

4.Java異常類的重要方法是什么?

異常及其所有子類不提供任何特定方法,并且所有方法都在基類Throwable中定義。

String getMessage() - 此方法返回消息String of Throwable,并且可以在通過構(gòu)造函數(shù)創(chuàng)建異常時提供消息。

String getLocalizedMessage() - 提供此方法,以便子類可以覆蓋它以向調(diào)用程序提供特定于語言環(huán)境的消息。此方法getMessage()的可拋出類實現(xiàn)只是使用方法來返回異常消息。

synchronized Throwable getCause() - 此方法返回異常的原因或null id,原因未知。

String toString() - 此方法以String格式返回有關(guān)Throwable的信息,返回的String包含Throwable類和本地化消息的名稱。

void printStackTrace() - 此方法將堆棧跟蹤信息打印到標(biāo)準(zhǔn)錯誤流,此方法已重載,我們可以將PrintStream或PrintWriter作為參數(shù)傳遞,以將堆棧跟蹤信息寫入文件或流。

?

5.解釋Java 7 ARM功能和multi-catch塊?

如果你在一個try塊中捕獲了很多異常,你會發(fā)現(xiàn)catch塊代碼看起來非常難看,并且主要由冗余代碼組成,以記錄錯誤,記住Java 7的一個特性是multi-catch塊。我們可以在一個catch塊中捕獲多個異常。具有此功能的catch塊如下所示:

catch(IOException?|?SQLException?|?Exception?ex){logger.error(ex);throw?new?MyException(ex.getMessage()); }

大多數(shù)情況下,我們使用finally塊來關(guān)閉資源,有時我們忘記關(guān)閉它們并在資源耗盡時獲得運(yùn)行時異常。這些異常很難調(diào)試,我們可能需要查看我們使用該類資源的每個地方,以確保我們關(guān)閉它。所以java 7的改進(jìn)之一是try-with-resources,我們可以在try語句中創(chuàng)建一個資源并在try-catch塊中使用它。當(dāng)執(zhí)行來自try-catch塊時,運(yùn)行時環(huán)境會自動關(guān)閉這些資源。具有這種改進(jìn)的try-catch塊樣本是:

try?(MyResource?mr?=?new?MyResource())?{System.out.println("MyResource?created?in?try-with-resources");}?catch?(Exception?e)?{e.printStackTrace();} 6.Java中Checked和Unchecked Exception有什么區(qū)別?

Checked Exceptions應(yīng)該使用try-catch塊在代碼中處理,否則方法應(yīng)該使用throws關(guān)鍵字讓調(diào)用者知道可能從方法拋出的已檢查異常。未經(jīng)檢查的異常不需要在程序中處理或在方法的throws子句中提及它們。

Exception是所有已檢查異常RuntimeException的超類,而是所有未經(jīng)檢查的異常的超類。請注意,RuntimeException是Exception的子類。

已檢查的異常是需要在代碼中處理的錯誤方案,否則您將收到編譯時錯誤。例如,如果您使用FileReader讀取文件,它會拋出FileNotFoundException,我們必須在try-catch塊中捕獲它或?qū)⑵湓俅螔伣o調(diào)用方法。

未經(jīng)檢查的異常主要是由編程不良引起的,例如在對象引用上調(diào)用方法時的NullPointerException,而不確保它不為null。例如,我可以編寫一個方法來從字符串中刪除所有元音。確保不傳遞空字符串是調(diào)用者的責(zé)任。我可能會改變方法來處理這些場景,但理想情況下,調(diào)用者應(yīng)該處理這個問題。

?

7.Java中throw和throws關(guān)鍵字有什么區(qū)別?

throws關(guān)鍵字與方法簽名一起用于聲明方法可能拋出的異常,而throw關(guān)鍵字用于破壞程序流并將異常對象移交給運(yùn)行時來處理它。

?

8.如何在Java中編寫自定義異常?

我們可以擴(kuò)展Exception類或其任何子類來創(chuàng)建我們的自定義異常類。自定義異常類可以擁有自己的變量和方法,我們可以使用它們將錯誤代碼或其他與異常相關(guān)的信息傳遞給異常處理程序。

自定義異常的一個簡單示例如下所示。

package?com.journaldev.exceptions;import?java.io.IOException;public?class?MyException?extends?IOException?{private?static?final?long?serialVersionUID?=?4664456874499611218L;private?String?errorCode="Unknown_Exception";public?MyException(String?message,?String?errorCode){super(message);this.errorCode=errorCode;}public?String?getErrorCode(){return?this.errorCode;}}

?

9.Java中的OutOfMemoryError是什么?

Java中的OutOfMemoryError是java.lang.VirtualMachineError的子類,當(dāng)JVM用完堆內(nèi)存時,它會拋出它。我們可以通過提供更多內(nèi)存來通過java選項運(yùn)行java應(yīng)用程序來修復(fù)此錯誤。

$>java?MyProgram?-Xms1024m?-Xmx1024m?-XX:PermSize=64M?-XX:MaxPermSize=256m

?

10.“主線程中的異?!庇心男┎煌那闆r?

一些常見的主線程異常情況是:

主線程java.lang.UnsupportedClassVersionError中的異常:

當(dāng)您的java類是從另一個JDK版本編譯并且您嘗試從另一個Java版本運(yùn)行它時,會出現(xiàn)此異常。

主線程java.lang.NoClassDefFoundError中的異常:

此異常有兩種變體。第一個是您提供類全名和.class擴(kuò)展名的地方。第二種情況是找不到Class。

主線程java.lang.NoSuchMethodError中的異常:

main:當(dāng)您嘗試運(yùn)行沒有main方法的類時會出現(xiàn)此異常。

線程“main”中的異常java.lang.ArithmeticException:

每當(dāng)從main方法拋出任何異常時,它都會打印異常是控制臺。第一部分解釋了從main方法拋出異常,第二部分打印異常類名,然后在冒號后打印異常消息。

?

11.Java中的final,finally和finalize有什么區(qū)別?

final和finally是java中的關(guān)鍵字,而finalize是一種方法。

final關(guān)鍵字可以與類變量一起使用,以便它們不能被重新分配,類可以避免按類擴(kuò)展,并且使用方法來避免子類覆蓋。

finally關(guān)鍵字與try-catch塊一起使用,以提供始終執(zhí)行的語句即使出現(xiàn)一些異常,通常最終也會用來關(guān)閉資源。

finalize()方法由垃圾收集器在銷毀對象之前執(zhí)行,這是確保關(guān)閉所有全局資源的好方法。

在三者之中,最后只涉及到j(luò)ava異常處理。

?

12.當(dāng)main方法拋出異常時會發(fā)生什么?

當(dāng)main()方法拋出異常時,Java Runtime終止程序并在系統(tǒng)控制臺中打印異常消息和堆棧跟蹤。

?

13.我們可以有一個空的catch塊嗎?

我們可以有一個空的catch塊,但它是最差編程的例子。我們永遠(yuǎn)不應(yīng)該有空的catch塊,因為如果異常被該塊捕獲,我們將沒有關(guān)于異常的信息,并且它將成為調(diào)試它的噩夢。應(yīng)該至少有一個日志記錄語句來記錄控制臺或日志文件中的異常詳細(xì)信息。

?

14.提供一些Java異常處理最佳實踐?

與Java異常處理相關(guān)的一些最佳實踐是:

  • 使用特定異常以便于調(diào)試。

  • 在程序中盡早拋出異常(Fail-Fast)。

  • 在程序后期捕獲異常,讓調(diào)用者處理異常。

  • 使用Java 7 ARM功能確保資源已關(guān)閉或使用finally塊正確關(guān)閉它們。

  • 始終記錄異常消息以進(jìn)行調(diào)試。

  • 使用multi-catch塊清潔關(guān)閉。

  • 使用自定義異常從應(yīng)用程序API中拋出單一類型的異常。

  • 遵循命名約定,始終以Exception結(jié)束。

  • 記錄在javadoc中使用@throws的方法拋出的異常。

  • 異常是昂貴的,所以只有在有意義的時候拋出它。否則,您可以捕獲它們并提供空或空響應(yīng)。

  • 總結(jié)

    以上是生活随笔為你收集整理的Java异常面试问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。