当我们在编写Java程序时,可能会遇到一些错误或异常情况。为了更好地处理这些异常,Java提供了异常处理机制。
Java中的异常分为两种类型:检查异常(checked exception)和非检查异常(unchecked exception)。
检查异常是指在编译时强制要求处理的异常,如果不处理,程序将无法通过编译。常见的检查异常包括IOException、SQLException等。
非检查异常是指在运行时可能发生的异常,不要求在编译时处理。常见的非检查异常包括NullPointerException、ArrayIndexOutOfBoundsException等。
一个方法必须声明所有可能可能抛出的检查型异常,而非检查型异常要么在我们的控制之外(Error),要么应该从一开始就避免错误情况的发生(RuntimeException)
下面我们来演示如何使用Java自定义异常和处理异常的代码。
1. 自定义异常
我们可以通过继承Exception类或RuntimeException类来自定义异常。下面是一个自定义异常的示例:
// 自定义异常类
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
// 使用自定义异常
class MyClass {
public void doSomething() throws MyException {
// 抛出自定义异常
throw new MyException("发生了自定义异常");
}
}
public class Main {
public static void main(String[] args) {
try {
MyClass obj = new MyClass();
obj.doSomething();
} catch (MyException e) {
System.out.println(e.getMessage());
}
}
}
在上面的示例中,我们定义了一个自定义异常类`MyException`,继承自Exception类。然后,在`MyClass`类中的`doSomething`方法中抛出了这个自定义异常。在`Main`类的`main`方法中,我们通过try-catch块捕获并处理了这个异常。
2. 异常处理
Java中的异常处理使用try-catch块来捕获和处理异常。下面是一个处理异常的示例:
public class Main {
public static void main(String[] args) {
try {
int[] arr = new int[5];
System.out.println(arr[10]); // 引发ArrayIndexOutOfBoundsException异常
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界异常");
} catch (Exception e) {
System.out.println("其他异常");
}
}
}
在上面的示例中,我们定义了一个长度为5的数组`arr`,然后尝试访问索引为10的元素,这将引发`ArrayIndexOutOfBoundsException`异常。在`main`方法中,我们使用try-catch块捕获并处理了这个异常。如果抛出的异常类型不是`ArrayIndexOutOfBoundsException`,则会被catch块中的其他异常处理代码捕获。