Java中的UnChecked异常有哪些?

  • Post category:Java

Java中的异常可以分为两类:Checked异常和UnChecked异常。其中,UnChecked异常也称为运行时异常,指的是在运行时出现的一类异常。与Checked异常不同的是,使用者不需要在代码中显式地处理UnChecked异常,但是在程序出现此类异常时,程序仍会中止运行。

常见的UnChecked异常包括如下几类:

  1. NullPointerException:一般发生在访问变量或者对象时,该变量或对象为空。比如下面的代码就会抛出NullPointerException异常:
String str = null;
str.trim();
  1. ArrayIndexOutOfBoundsException:访问了不存在的数组元素,比如:
String[] arr = new String[2];
arr[2] = "hello";
  1. ClassCastException:发生在类类型转换时,当需要将一个对象强制转换成另一个类型,但是实际类型不兼容时,抛出此异常。比如:
Object obj = "hello";
Integer i = (Integer) obj; // 此处会抛出ClassCastException异常
  1. ArithmeticException:在数学计算过程中出现了异常,比如除数为0。比如:
int a = 10 / 0; // 会抛出ArithmeticException异常

除了以上常见的UnChecked异常,还有如下几种:

  1. IllegalStateException:在调用某个方法时,发现该方法被调用的状态不合法时,抛出此异常。

  2. IllegalArgumentException:用不合法的参数在调用某个方法时,抛出此异常。

  3. UnsupportedOperationException:不支持某个操作时,抛出此异常。

示例1:NullPointerException

假如有一个Person类,其中有一个name属性,如下所示:

public class Person {
    private String name;
    // 省略其它代码
}

现在我们创建了一个Person对象,并未给该对象的name属性赋值:

Person p = new Person();

在后续代码,如果我们通过非空检查的方式来调用该对象的name属性,就会抛出NullPointerException异常:

if (p != null && p.getName() != null) {
    System.out.println(p.getName());
}

示例2:ArithmeticException

以下代码尝试将两个整数相除:

int x = 10;
int y = 0;
int res = x / y;

由于y为0,此处会抛出ArithmeticException异常。