Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 其他

Java APIs 和框架

Java 類引用

Java 有用資源

Java - 自定義異常



Java 自定義異常

自定義異常指的是根據需要建立您自己的異常來定製異常。自定義異常派生自Exception類。

Java 自定義異常的必要性

  • 根據專案中不同型別的錯誤對異常進行分類。
  • 允許應用程式級別的異常處理。

在 Java 中建立自定義異常

要建立自定義異常,需要建立一個,該類必須繼承自 Exception 類。

語法

以下是 Java 中建立自定義類的語法:

class MyException extends Exception {
}

您只需要擴充套件預定義的Exception類即可建立您自己的異常。這些被認為是已檢查異常。

建立自定義異常的規則

編寫您自己的異常類時,請記住以下幾點:

  • 所有異常都必須是 Throwable 的子類。

  • 如果要編寫由“處理或宣告”規則自動強制執行的已檢查異常,則需要擴充套件 Exception 類。

  • 如果要編寫執行時異常,則需要擴充套件 RuntimeException 類。

Java 自定義異常示例

下面的InsufficientFundsException類是一個使用者定義的異常,它擴充套件了 Exception 類,使其成為一個已檢查異常。異常類就像任何其他類一樣,包含有用的欄位和方法。

class InsufficientFundsException extends Exception {
   private double amount;
   
   public InsufficientFundsException(double amount) {
      this.amount = amount;
   }
   
   public double getAmount() {
      return amount;
   }
}

為了演示使用我們使用者定義的異常,下面的 CheckingAccount 類包含一個丟擲 InsufficientFundsException 的 withdraw() 方法。

class CheckingAccount {
   private double balance;
   private int number;
   
   public CheckingAccount(int number) {
      this.number = number;
   }
   
   public void deposit(double amount) {
      balance += amount;
   }
   
   public void withdraw(double amount) throws InsufficientFundsException {
      if(amount <= balance) {
         balance -= amount;
      }else {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
   
   public double getBalance() {
      return balance;
   }
   
   public int getNumber() {
      return number;
   }
}

下面的 BankDemo 程式演示了呼叫 CheckingAccount 的 deposit() 和 withdraw() 方法。

package com.tutorialspoint;

public class BankDemo {

   public static void main(String [] args) {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500...");
      c.deposit(500.00);
      
      try {
         System.out.println("\nWithdrawing $100...");
         c.withdraw(100.00);
         System.out.println("\nWithdrawing $600...");
         c.withdraw(600.00);
      } catch (InsufficientFundsException e) {
         System.out.println("Sorry, but you are short $" + e.getAmount());
         e.printStackTrace();
      }
   }
}

class CheckingAccount {
   private double balance;
   private int number;
   
   public CheckingAccount(int number) {
      this.number = number;
   }
   
   public void deposit(double amount) {
      balance += amount;
   }
   
   public void withdraw(double amount) throws InsufficientFundsException {
      if(amount <= balance) {
         balance -= amount;
      }else {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
   
   public double getBalance() {
      return balance;
   }
   
   public int getNumber() {
      return number;
   }
}

class InsufficientFundsException extends Exception {
   private double amount;
   
   public InsufficientFundsException(double amount) {
      this.amount = amount;
   }
   
   public double getAmount() {
      return amount;
   }
}

輸出

編譯以上三個檔案並執行 BankDemo。這將產生以下結果:

Depositing $500...

Withdrawing $100...

Withdrawing $600...
Sorry, but you are short $200.0
com.tutorialspoint.InsufficientFundsException
	at com.tutorialspoint.CheckingAccount.withdraw(BankDemo.java:39)
	at com.tutorialspoint.BankDemo.main(BankDemo.java:14)

在下一個示例中,我們將自定義異常宣告為 RuntimeException,使其成為未檢查異常類,如下所示:

class MyException extends RuntimeException {
}

透過擴充套件 RuntimeException 建立自定義類的示例

我們擴充套件預定義的RuntimeException類來建立您自己的異常作為未檢查異常。下面的InsufficientFundsException類是一個使用者定義的異常,它擴充套件了 RuntimeException 類,使其成為未檢查異常。RuntimeException 類就像任何其他類一樣,包含有用的欄位和方法。

class InsufficientFundsException extends RuntimeException {
   private double amount;
   
   public InsufficientFundsException(double amount) {
      this.amount = amount;
   }
   
   public double getAmount() {
      return amount;
   }
}

下面的 BankDemo 程式演示了使用未檢查異常呼叫 CheckingAccount 的 deposit() 和 withdraw() 方法。

package com.tutorialspoint;

public class BankDemo {

   public static void main(String [] args) {
      CheckingAccount c = new CheckingAccount(101);
      System.out.println("Depositing $500...");
      c.deposit(500.00);
      
      System.out.println("\nWithdrawing $100...");
      c.withdraw(100.00);
      System.out.println("\nWithdrawing $600...");
      c.withdraw(600.00);

   }
}

class CheckingAccount {
   private double balance;
   private int number;
   
   public CheckingAccount(int number) {
      this.number = number;
   }
   
   public void deposit(double amount) {
      balance += amount;
   }
   
   public void withdraw(double amount) {
      if(amount <= balance) {
         balance -= amount;
      }else {
         double needs = amount - balance;
         throw new InsufficientFundsException(needs);
      }
   }
   
   public double getBalance() {
      return balance;
   }
   
   public int getNumber() {
      return number;
   }
}

class InsufficientFundsException extends RuntimeException {
   private double amount;
   
   public InsufficientFundsException(double amount) {
      this.amount = amount;
   }
   
   public double getAmount() {
      return amount;
   }
}

輸出

編譯並執行 BankDemo。這將產生以下結果:

Depositing $500...

Withdrawing $100...

Withdrawing $600...
Exception in thread "main" 
com.tutorialspoint.InsufficientFundsException
	at com.tutorialspoint.CheckingAccount.withdraw(BankDemo.java:35)
	at com.tutorialspoint.BankDemo.main(BankDemo.java:13)
廣告