首頁 Java Java面試題 java面試題——異常

java面試題——異常

Dec 10, 2020 pm 04:38 PM
java 例外 面試題

java面試題——異常

java面試題之異常

面試題目如下:

1、什麼是Java中的例外?

異常是在程式執行期間​​可能發生的錯誤事件,並且會中斷它的正常流程。異常可能來自不同類型的情況,例如使用者輸入的錯誤數據,硬體故障,網路連接故障等。

(學習影片分享:java教學影片

每當執行java語句時發生任何錯誤,都會建立一個異常對象,然後JRE會嘗試尋找異常處理程式來處理異常。如果找到合適的異常處理程序,則將異常物件傳遞給處理程序程式碼以處理異常,稱為捕獲異常。如果未找到處理程序,則應用程式將異常拋出到運行時環境,JRE將終止該程式。

Java異常處理框架僅用於處理執行階段錯誤,​​編譯時錯誤不由例外處理框架處理。

2、Java中的例外處理關鍵字是什麼?

java異常處理中使用了四個關鍵字。

throw:有時我們明確要建立例外物件然後拋出它來停止程式的正常處理。 throw關鍵字用於向運行時拋出異常來處理它。

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

try-catch:我們在程式碼中使用try-catch區塊進行例外處理。 try是區塊的開始,catch是在try區塊的末端處理異常。我們可以使用try有多個catch區塊,try-catch區塊也可以嵌套。 catch區塊需要一個應該是Exception類型的參數。

finally:finally區塊是可選的,只能用於try-catch區塊。由於異常會暫停執行過程,因此我們可能會開啟一些不會關閉的資源,因此我們可以使用finally區塊。 finally區塊總是被執行,無論是否發生異常。

3、解釋Java異常層次結構?

Java異常是分層的,繼承用於對不同類型的例外進行分類。 Throwable是Java Exceptions Hierarchy的父類,它有兩個子物件 - Error和Exception。異常進一步分為檢查異常和運行時異常。

錯誤是超出應用程式範圍的特殊情況,並且無法預測並從中恢復,例如硬體故障,JVM崩潰或記憶體不足錯誤。

Checked Exceptions是我們可以在程式中預期並嘗試從中復原的特殊情況,例如FileNotFoundException。我們應該捕獲此異常並向用戶提供有用的消息並正確記錄以進行調試。 Exception是所有Checked Exceptions的父類別。

運行時異常是由錯誤的程式設計引起的,例如嘗試從Array中檢索元素。我們應該在嘗試檢索元素之前先檢查數組的長度,否則它可能會ArrayIndexOutOfBoundException在運行時拋出。 RuntimeException是所有執行時期異常的父類別。

4、Java異常類別的重要方法是什麼?

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

String getMessage() - 此方法返回消息String of Throwable,并且可以在通过构造函数创建异常时提供消息。
String getLocalizedMessage() - 提供此方法,以便子类可以覆盖它以向调用程序提供特定于语言环境的消息。此方法getMessage()的可抛出类实现只是使用方法来返回异常消息。
synchronized Throwable getCause() - 此方法返回异常的原因或null id,原因未知。
String toString() - 此方法以String格式返回有关Throwable的信息,返回的String包含Throwable类和本地化消息的名称。
void printStackTrace() - 此方法将堆栈跟踪信息打印到标准错误流,此方法已重载,我们可以将PrintStream或PrintWriter作为参数传递,以将堆栈跟踪信息写入文件或流。
登入後複製

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

如果你在一個try區塊中捕獲了很多異常,你會發現catch區塊程式碼看起來非常難看,並且主要由冗餘程式碼組成,以記錄錯誤,記住Java 7的一個特性是multi -catch區塊。我們可以在一個catch區塊中捕捉多個異常。具有此功能的catch區塊如下所示:

catch(IOException | SQLException | Exception ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
登入後複製

大多數情況下,我們使用finally區塊來關閉資源,有時我們忘記關閉它們並在資源耗盡時獲得運行時異常。這些異常很難調試,我們可能需要查看我們使用該類資源的每個地方,以確保我們關閉它。所以java 7的改進之一是try-with-resources,我們可以在try語句中建立一個資源並在try-catch區塊中使用它。當執行來自try-catch區塊時,執行環境會自動關閉這些資源。具有這種改進的try-catch區塊樣本是:

try (MyResource mr = new MyResource()) {
System.out.println("MyResource created in try-with-resources");
} catch (Exception e) {
e.printStackTrace();
}
登入後複製

(更多相關面試題分享:java面試題目及答案

6、Java中Checked和Unchecked Exception有什麼差別?

Checked Exceptions應該使用try-catch區塊在程式碼中處理,否則方法應該使用throws關鍵字讓呼叫者知道可能從方法拋出的已檢查異常。未經檢查的異常不需要在程式中處理或在方法的throws子句中提及它們。

Exception是所有已檢查異常RuntimeException的超類,而是所有未經檢查的異常的超類。請注意,RuntimeException是Exception的子類別。

已检查的异常是需要在代码中处理的错误方案,否则您将收到编译时错误。例如,如果您使用FileReader读取文件,它会抛出FileNotFoundException,我们必须在try-catch块中捕获它或将其再次抛给调用方法。

未经检查的异常主要是由编程不良引起的,例如在对象引用上调用方法时的NullPointerException,而不确保它不为null。例如,我可以编写一个方法来从字符串中删除所有元音。确保不传递空字符串是调用者的责任。我可能会改变方法来处理这些场景,但理想情况下,调用者应该处理这个问题。

7、Java中throw和throws关键字有什么区别?

throws关键字与方法签名一起用于声明方法可能抛出的异常,而throw关键字用于破坏程序流并将异常对象移交给运行时来处理它。

8、如何在Java中编写自定义异常?

我们可以扩展Exception类或其任何子类来创建我们的自定义异常类。自定义异常类可以拥有自己的变量和方法,我们可以使用它们将错误代码或其他与异常相关的信息传递给异常处理程序。

自定义异常的一个简单示例如下所示。

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的子类,当JVM用完堆内存时,它会抛出它。我们可以通过提供更多内存来通过java选项运行java应用程序来修复此错误。

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

10、“主线程中的异常”有哪些不同的情况?

一些常见的主线程异常情况是:

主线程java.lang.UnsupportedClassVersionError中的异常:

当您的java类是从另一个JDK版本编译并且您尝试从另一个Java版本运行它时,会出现此异常。

主线程java.lang.NoClassDefFoundError中的异常:

此异常有两种变体。第一个是您提供类全名和.class扩展名的地方。第二种情况是找不到Class。

主线程java.lang.NoSuchMethodError中的异常:

main:当您尝试运行没有main方法的类时会出现此异常。

线程“main”中的异常java.lang.ArithmeticException:

每当从main方法抛出任何异常时,它都会打印异常是控制台。第一部分解释了从main方法抛出异常,第二部分打印异常类名,然后在冒号后打印异常消息。

11、Java中的final,finally和finalize有什么区别?

final和finally是java中的关键字,而finalize是一种方法。

final关键字可以与类变量一起使用,以便它们不能被重新分配,类可以避免按类扩展,并且使用方法来避免子类覆盖。

finally关键字与try-catch块一起使用,以提供始终执行的语句即使出现一些异常,通常最终也会用来关闭资源。

finalize()方法由垃圾收集器在销毁对象之前执行,这是确保关闭所有全局资源的好方法。

在三者之中,最后只涉及到java异常处理。

12、当main方法抛出异常时会发生什么?

当main()方法抛出异常时,Java Runtime终止程序并在系统控制台中打印异常消息和堆栈跟踪。

13、我们可以有一个空的catch块吗?

我们可以有一个空的catch块,但它是最差编程的例子。我们永远不应该有空的catch块,因为如果异常被该块捕获,我们将没有关于异常的信息,并且它将成为调试它的噩梦。应该至少有一个日志记录语句来记录控制台或日志文件中的异常详细信息。

14、提供一些Java异常处理最佳实践?

与Java异常处理相关的一些最佳实践是:

使用特定异常以便于调试。

在程序中尽早抛出异常(Fail-Fast)。

在程序后期捕获异常,让调用者处理异常。

使用Java 7 ARM功能确保资源已关闭或使用finally块正确关闭它们。

始终记录异常消息以进行调试。

使用multi-catch块清洁关闭。

使用自定义异常从应用程序API中抛出单一类型的异常。

遵循命名约定,始终以Exception结束。

记录在javadoc中使用@throws的方法抛出的异常。

异常是昂贵的,所以只有在有意义的时候抛出它。否则,您可以捕获它们并提供空或空响应。

相关推荐:java入门教程

以上是java面試題——異常的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1652
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP與Python:核心功能 PHP與Python:核心功能 Apr 13, 2025 am 12:16 AM

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP:許多網站的基礎 PHP:許多網站的基礎 Apr 13, 2025 am 12:07 AM

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP的影響:網絡開發及以後 PHP的影響:網絡開發及以後 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

See all articles