Java 教程

Java 控制語句

面向物件程式設計

Java 內建類

Java 檔案處理

Java 錯誤和異常

Java 多執行緒

Java 同步

Java 網路程式設計

Java 集合

Java 介面

Java 資料結構

Java 集合演算法

高階 Java

Java 雜項

Java API 和框架

Java 類參考

Java 有用資源

Java - 內建異常



Java 中的內建異常

Java 在標準包java.lang內定義了幾個異常類。

這些異常中最普遍的是標準型別 RuntimeException 的子類。由於java.lang被隱式匯入到所有 Java 程式中,因此大多數從 RuntimeException 派生的異常都自動可用。

Java 內建異常的型別

Java 中的內建異常分為兩類:受檢異常和非受檢異常。

  • 受檢異常:受檢異常在編寫程式碼期間由程式設計師處理,可以使用try-catch 塊進行處理。這些異常在編譯時進行檢查。
  • 非受檢異常:非受檢異常不由程式設計師處理。這些異常在執行時丟擲。一些非受檢異常包括 NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException 等。

Java 中常見的內建異常

Java 定義了其他幾種與各種類庫相關的異常型別。以下是 Java 非受檢和受檢 RuntimeException 的列表。

序號 異常及描述
1

ArithmeticException

算術錯誤,例如除以零。

2

ArrayIndexOutOfBoundsException

陣列索引越界。

3

ArrayStoreException

向陣列元素分配不相容的型別。

4

ClassCastException

無效的強制轉換。

5

IllegalArgumentException

用於呼叫方法的非法引數。

6

IllegalMonitorStateException

非法的監視器操作,例如等待未鎖定執行緒。

7

IllegalStateException

環境或應用程式處於不正確狀態。

8

IllegalThreadStateException

請求的操作與當前執行緒狀態不相容。

9

IndexOutOfBoundsException

某種型別的索引越界。

10

NegativeArraySizeException

建立大小為負數的陣列。

11

NullPointerException

無效地使用空引用。

12

NumberFormatException

字串到數字格式的無效轉換。

13

SecurityException

試圖違反安全性。

14

StringIndexOutOfBounds

試圖索引字串範圍之外。

15

UnsupportedOperationException

遇到不支援的操作。

16

ClassNotFoundException

類未找到。

17

CloneNotSupportedException

試圖克隆未實現 Cloneable 介面的物件。

18

IllegalAccessException

拒絕訪問類。

19

InstantiationException

試圖建立抽象類或介面的物件。

20

InterruptedException

一個執行緒被另一個執行緒中斷。

21

NoSuchFieldException

請求的欄位不存在。

22

NoSuchMethodException

請求的方法不存在。

Java 內建異常示例

示例 1:演示不帶 try-catch 的算術異常

在這個示例中,我們透過將一個值除以 0 來建立錯誤。在這種情況下,將引發一個未檢查異常。由於是未檢查異常,編譯器不會報錯,程式將成功編譯。一旦程式執行,異常將被丟擲,JVM 將攔截它並終止程式,並在列印最後一條語句之前終止。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
        
      int b = 0;
      int c = 1/b;
      System.out.println("c :" + c);
   }
}

輸出

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.tutorialspoint.ExcepTest.main(ExcepTest.java:8)

示例 2:使用 try-catch 演示算術異常

在這個示例中,我們正在處理未檢查異常。第一步,我們透過將一個值除以 0 來生成錯誤。在這種情況下,將引發一個未檢查異常。我們透過 ArithmeticException 處理它。一旦程式執行,異常將被丟擲,catch 塊將攔截它並列印最後一條語句。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      try {
         int b = 0;
         int c = 1/b;
         System.out.println("c :" + c);
      }
      catch (ArithmeticException e) {
         System.out.println("Exception thrown  :" + e);
      }
      System.out.println("Out of the block");
   }
}

輸出

Exception thrown  :java.lang.ArithmeticException: / by zero
Out of the block

示例 3:演示 NoSuchMethodException 異常

在這個示例中,我們展示了檢查異常必須由程式碼處理,否則編譯器會報錯。每當方法丟擲檢查異常時,它必須要麼處理異常,要麼宣告 throws 異常語句,就像我們對 getName() 方法所做的那樣。當我們嘗試執行該方法時,JVM 會報錯,如下面的輸出所示。

package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) {
      ExcepTest excepTest = new ExcepTest();
      excepTest.getName();
   }
   
   private String getName() throws NoSuchMethodException {
	   throw new NoSuchMethodException();
   }
}

輸出

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Unhandled exception type NoSuchMethodException

    at com.tutorialspoint.ExcepTest.main(ExcepTest.java:7)
java_exceptions.htm
廣告