天天看點

學習Java快速入門全流程體系介紹-異常處理

Java異常處理是指在程式運作時檢測到異常情況并嘗試以适當的方式進行處理的機制。Java中提供了一種try-catch-finally結構來處理異常。處理異常的主要目的是使程式在遇到錯誤時能夠優雅地退出并提供異常資訊,以幫助開發人員更好地了解問題并修複錯誤。

在Java中,當某種異常被抛出時,會從程式中抛出一個異常對象。異常對象包含兩個重要的資訊:異常的類型和異常的資訊。例如,當一個空指針異常被抛出時,就會生成一個NullPointerException對象,它包含了發生了哪個方法調用、在哪個對象上調用以及它具體是哪個對象為空的資訊等。

在處理異常時,我們需要使用try-catch-finally語句塊。try塊中包含可能會導緻異常的代碼,catch塊中包含對異常進行處理的代碼,finally塊中包含在任何情況下都需要執行的代碼,例如資源清理等。

下面是一個簡單的Java異常處理的示例:

try {
  // 可能會出現異常的代碼
} catch (ExceptionType1 e1) {
  // 處理異常1的代碼
} catch (ExceptionType2 e2) {
  // 處理異常2的代碼
} finally {
  // 無論是否有異常都要執行的代碼
}
           

在代碼中,我們使用了try塊來執行可能會抛出異常的操作,如果發生異常,則程式将跳轉到catch塊來處理異常。catch塊中包含了對異常進行處理的代碼,其中ExceptionType1和ExceptionType2代表可能抛出的異常類型。最後,在finally塊中,包含了在任何情況下都必須執行的代碼。

總體來說,Java異常處理機制使我們能夠更好地管理和處理程式中的異常情況,以提高程式的穩定性和健壯性。

異常分類

在Java中,異常被分為兩種類型:Checked異常和Unchecked異常。

  1. Checked異常

Checked異常是指在編譯時必須處理的異常。這種異常通常代表程式中的錯誤處理邏輯,例如檔案I/O、網絡I/O等。如果不捕獲Checked異常,編譯器就不會編譯該代碼。編寫代碼時,應該遵守「捕獲或聲明Clause」規則,即将代碼包含在try-catch代碼塊中或在方法定義中聲明該方法可能抛出的異常。

  1. Unchecked異常

Unchecked異常是指在編譯時不需要捕獲或聲明的異常。這種異常通常代表程式Bug或程式設計問題,例如空指針異常、除以零異常等。Unchecked異常通常是由運作時環境檢測到的,并且在運作時由Java虛拟機(JVM)抛出。是以,在編寫代碼時不需要顯式地捕獲或聲明Unchecked異常。

在Java中,所有的異常都繼承自Throwable類,其中分為兩大類:Error類和Exception類。Error類通常代表Java運作時錯誤,例如記憶體不足等。這種錯誤通常是由JVM抛出的,并且不應該被程式捕獲或嘗試恢複。而Exception類則分為Checked異常和Unchecked異常兩種類型,通常代表與程式執行相關的異常,例如空指針異常、算術異常等。

總之,在編寫Java代碼時應該注意異常處理。對于Checked異常要進行顯式的處理,而對于Unchecked異常則應該遵循良好的程式設計習慣,以避免發生異常。

異常處理機制

Java 異常處理機制是一種程式運作時檢測出的錯誤或異常情況的處理方法。Java 異常處理機制通過 try-catch-finally 語句塊來實作。當程式運作時遇到異常或錯誤時,會抛出異常對象并從目前方法或代碼塊跳出,程式運作在目前異常對象的 catch 塊,然後執行其中的異常處理代碼。在 Java 中,異常分為 Checked Exception 和 Unchecked Exception。

  1. Checked Exception

Checked Exception 是指編譯時必須處理的異常。編寫代碼時,需要在 catch 塊中顯式地處理 Checked Exception 或在方法中使用 throws 關鍵字聲明将該異常抛出。例如,FileNotFound Exception、IOException 等等。

try {
    // code that may cause a Checked Exception
} catch (IOException e) {
    // handle the IOException error
}
           
  1. Unchecked Exception

Unchecked Exception 是指編譯時不需要特别處理的異常。Unchecked Exception 通常與程式 Bug 或邏輯錯誤有關,例如 NullPointerException、ArrayIndexOutOfBoundsException 等等。因為 Unchecked Exception 可能導緻程式崩潰或其他嚴重問題,是以應該避免産生這些異常。

int a = 10;
int b = 0;

try {
    int c = a / b;
} catch (ArithmeticException e) {
    // handle ArithmeticException
}
           

finally 塊

finally 塊中的代碼始終會被執行,無論 try 塊内是否存在異常或是否有 catch 塊。finally 塊常常用于釋放資源,例如關閉檔案或資料庫連接配接等等。

try {
    // code that may cause an exception
} catch (Exception e) {
    // exception handling code
} finally {
    // code that always will run regardless of exceptions
}
           

總之,在 Java 中,異常處理機制是一種在程式運作時檢測出的錯誤或異常情況的處理方法,通過處理異常,程式可以更加優雅地退出并提供異常資訊來幫助開發人員修複錯誤。

異常向上抛

在Java中,通過throw關鍵字可以抛出異常。throw關鍵字後面跟着一個異常對象。一旦throw語句被調用,程式将立即跳轉到該throw語句之後的catch塊中,找到與該throw語句抛出的異常對象比對的catch塊,并執行其中的異常處理代碼。

如下面的代碼所示,我們可以在一個方法中使用throw語句抛出異常:

public void divide(int a, int b) throws ArithmeticException {
    if (b == 0) {
        throw new ArithmeticException("Divide by zero error");
    }
    int result = a / b;
    System.out.println("Result : " + result);
}
           

這個方法将抛出一個ArithmeticException異常,如果被除數為0。在這種情況下,我們使用throw語句在方法中抛出一個新的ArithmeticException對象,并将一個錯誤消息作為該對象的參數。然後,我們從方法中傳回并将控制權傳遞到調用該方法的catch塊中,以便處理該異常。

總之,在Java中,通過throw關鍵字可以抛出異常對象,以便在程式運作時檢測錯誤或異常情況,并提供異常資訊用于幫助開發人員調試和修複程式。

自定義異常

Java中,我們可以通過定義自己的異常類來控制代碼中的異常情況。自定義異常類應該繼承自Throwable類的子類,通常是Exception類或RuntimeException類。自定義異常通常在程式中包含可供檢視的異常資訊,并添加特定的行為來處理異常,使程式更加健壯和穩定。

下面是一個自定義異常的示例:

public class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}
           

在這個例子中,我們建立了一個名為CustomException的異常類。這個類繼承自Exception類,并帶有一個構造函數,可以接收異常消息作為參數。類的主要作用是在程式中提供可讀的異常資訊,并為開發人員提供處理異常的更多控制選項。

以下是調用自定義異常類的示例:

public static void main(String[] args) {
    try {
        throw new CustomException("Custom Exception occurred");
    } catch (CustomException e) {
        System.out.println("Caught exception: " + e.getMessage());
    }
}
           

在這個例子中,我們在try塊中抛出自定義異常,并在catch塊中捕獲該異常。我們可以使用getMessage()方法擷取異常消息,并在控制台上列印它。這個過程示範了如何使用自定義異常類來處理程式中的異常情況。

總之,通過定義自己的異常類,我們可以為代碼中的異常情況提供更好的控制和處理方式。自定義異常類可以幫助程式更穩定并提供有用的資訊以幫助開發人員修複程式的錯誤。

繼續閱讀