Java程式處理除零和多個異常


異常是指中斷程式正常執行流程的異常事件。當發生異常時,會生成一個稱為異常物件的物件,其中包含異常的詳細資訊,例如名稱、描述和程式狀態。在本節中,我們將編寫一個java程式來處理除零異常以及如何處理多個異常。

異常型別

有三種類型的異常:

  • 檢查異常 - 檢查異常是編譯時異常,即在程式編譯期間檢查。這些異常不能被忽略,必須由程式設計師處理。

示例 - IOException、SQLException、ClassNotFoundException。

  • 未檢查異常 - 未檢查異常是執行時異常,即在編譯期間被忽略,在程式執行期間檢查。

示例 - NullPointerException、ArithmeticException 和 ArrayIndexOutOfBoundsException

  • 錯誤 - 錯誤是無法恢復的異常,通常是由 Java 虛擬機器或系統資源問題引起的。錯誤與異常不同,錯誤不應由程式設計師捕獲或處理,因為它們表明存在嚴重問題,程式無法修復。

示例 - OutOfMemoryError、StackOverflowError。

Java中不同型別異常的示例

  • ArithmeticException - 當算術運算產生溢位或下溢,或除以零時引發。

  • NullPointerException - 當我們指向一個空物件時引發。

  • ArrayIndexOutOfBoundsException - 當我們嘗試訪問超出範圍的索引時引發。

  • IOException - 當輸入/輸出操作失敗時引發。

  • FileNotFoundException - 當嘗試訪問不存在的檔案時引發。

異常處理

異常處理是在程式執行期間處理異常的過程,以避免中斷執行流程。這在 Java 中使用try-catch塊來完成。try 塊包含可能引發異常的程式碼,catch 塊包含處理異常的程式碼。

我們可以使用內建異常,也可以建立自定義或使用者定義的異常。自定義異常擴充套件 Exception 類或RuntimeException類。

語法

try-catch 塊 - Java 中的 try-catch 塊用於處理異常。try 塊包含可能引發異常的程式碼。catch 塊捕獲異常並處理異常。

try {
   // Protected code
} catch (ExceptionName e1) {
   // Catch block
}

getMessage() - 此方法用於獲取異常的詳細描述作為字串。

exceptionObject.getMessage()

throw - throw 是 Java 中用於顯式引發異常的關鍵字。

super() - super() 方法用於呼叫父類中的方法。

現在我們將討論 Java 中處理除零異常的不同方法,並實現 Java 程式碼。

方法 1:使用 try-catch 塊

在這種方法中,我們使用 Java 中的 try-catch 塊來處理除零異常。我們在此方法中遵循的步驟如下:

  • 我們為分子和分母初始化兩個數字。我們將分母初始化為零。

  • 在 try 塊中,我們編寫除法語句,因為它可能引發異常,並在 catch 塊中,我們使用算術異常處理異常。

現在,讓我們看看 Java 中實現程式碼的示例。

示例

在此示例中,我們初始化兩個變數“numerator”和“denominator”,我們確保將分母初始化為零,並執行除法運算,因為我們不能使用零執行除法,所以會引發異常,並使用 catch 塊捕獲。

//Java program to handle divide by zero exception
import java.util.*;
public class Main{
   public static void main(String[] args) {
      
      int numerator  = 7;
      int denominator = 0;
      try {
         int answer = numerator / denominator;
         System.out.println("Result: " + answer);
      } catch (ArithmeticException ex) {
         System.out.println("Error: " + ex.getMessage());
         System.out.println("Cannot divide a value by zero.");
      }
   }
}

輸出

Error: / by zero
Cannot divide a value by zero.

方法 2:使用自定義異常類

在這種方法中,我們將實現一個自定義類或程式設計師建立的類來處理 Java 中的除零異常。我們在此方法中遵循的步驟如下:

  • 我們為分子和分母初始化兩個數字。分母值初始化為零。

  • 我們為除零異常建立一個自定義類,該類擴充套件了 Exception 類

  • 在 try 塊中,我們顯式引發異常並使用 catch 塊呼叫自定義類來處理異常。

示例

在此示例中,我們建立了一個“DivideByZeroException”自定義類並擴充套件了“Exception”。此類處理除以零引起的異常。當在 main 方法中引起異常時,我們透過使用“new”關鍵字建立類的物件來使用“throw”關鍵字呼叫自定義類。

import java.util.*;
class DivideByZeroException extends Exception {
   public DivideByZeroException(String message) {
      super(message);
   }
}
public class Main {
   public static void main(String[] args) {
      int numerator = 5;
      int denominator = 0;
      try {
         if (denominator == 0) {
            throw new DivideByZeroException("Error: Cannot divide a number by zero.");
         }
         int answer  = numerator / denominator;
         System.out.println("Result: " + answer);
      } catch (DivideByZeroException ex) {
         System.out.println(ex.getMessage());
      }
   }
}

輸出

Error: Cannot divide a number by zero.

處理多個異常

處理多個異常只不過是為單個 try 塊提供多個 catch 塊,並處理 try 塊中發生的多個異常。我們將處理不同型別的異常,並使用每個 catch 塊處理它們。

在這種方法中,我們將處理單個 try 中發生的異常,並使用多個 catch 塊進行多個異常處理。

步驟

  • 宣告一個 try 塊並初始化兩個整型變數,即 numerator 和 denominator。denominator 變數初始化為 0。

  • 現在,如果 denominator 值等於零,則引發 ArithmeticException。

  • 編寫多個 catch 塊來處理不同的異常。

  • 使用 Java 中的不同內建方法並打印發生的異常訊息和異常。

示例

在此示例中,我們使用單個 try 塊後跟多個 catch 塊。如果 try 塊引發 ArithmeticException,則執行處理 ArithmeticException 程式碼的 catch 塊。如果 try 塊引發 NullPointerException,則執行該特定 catch 塊。如果 catch 塊未處理 try 塊引發的特定異常,則執行最後一個 catch 塊程式碼,因為它處理通用 Exception 案例。從示例中,由於 denominator 值初始化為零,我們使用“throw”關鍵字引發 ArthemeticException,並且執行處理 ArthemeticException 的 catch 塊。

import java.util.*;
public class Main {
   public static void main(String[] args) {
      try {
         int numerator = 10, denominator = 0 ;
         if(denominator == 0) {
            throw new ArithmeticException();
         }
      } catch (ArithmeticException e) {
         System.out.println("ArithmeticException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      } catch (NullPointerException e) {
         System.out.println("NullPointerException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("ArrayIndexOutOfBoundsException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      } catch (Exception e) {
         System.out.println("NullPointerException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      }
   }
}

輸出

ArithmeticException caught.
Message: null
Stack Trace: 
Cause: null
java.lang.ArithmeticException
	at Main.main(Main.java:7)

因此,在本文中,我們討論瞭如何處理除以零引起的異常以及如何在 Java 中使用不同的方法處理多個異常。

更新於: 2024年5月31日

8K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

立即開始
廣告