Java异常继承结构解析
异常概述
在Java语言中,异常分为两种:检查异常和非检查异常。
检查异常,也叫已检查异常,是指Java编译器在编译时会检查的异常,而且这种异常要么被捕获,要么被声明抛出。
非检查异常,也叫未检查异常,是指Java编译器不检查的异常。这种异常通常是由程序逻辑而不是语法错误引起的,比如空指针异常、类型转换异常等。
Java中的所有异常类型均可动态创建,但在抛出异常时需使用Java标准库提供的Throwable类、Exception类或Error类及其子类。
异常继承结构
Java中的异常类之间存在继承关系,如下所示:
-
Throwable是所有异常和错误的超类。
-
异常分为可检查异常和运行时异常。
-
可检查异常主要是指IOException及其子类,编译器会检查这些异常是否被捕获或抛出。
-
运行时异常,也称为非检查异常,主要是指RuntimeException及其子类,这些异常不需要在方法声明中进行声明或捕获。
-
-
错误是指无法通过程序解决的系统异常。
类型说明
在Java异常继承机制中,Throwable类和其下面的两大子类Exception类、Error类在Java编译器中的异常体系中是关键组成部分,如下所示:
|-------------- Throwable --------------|
| | | |
Error Exception RuntimeException
| | | |
| IOExcp. | | ClassCastExcp. |
... ...
在这个继承关系树中,标志着Java异常的基本架构,是任何错误和异常的根源。在Java中,其它详细的异常类型都是(Throwable -> Exception | Error)的子类。其中异常分为两大类(RuntimeException | IOException),也就是说,RuntimeException和IOException是Java编译器中特殊类型的异常。
示例说明
示例1
下面的示例代码演示了一个数组越界异常:
public class ArrayIndexOutOfBoundsExceptionDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println(arr[3]); // 数组越界异常
}
}
以上代码的输出如下:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at ArrayIndexOutOfBoundsExceptionDemo.main(ArrayIndexOutOfBoundsExceptionDemo.java:6)
从输出结果可看出,该程序抛出了ArrayIndexOutOfBoundsException异常,并显示了异常的描述信息及异常出现时的代码行数。
示例2
下面的示例代码是一个自定义异常的实现:
public class CustomExceptionDemo {
public static void main(String[] args) {
try {
throw new CustomException("自定义异常测试");
} catch (CustomException e) {
e.printStackTrace();
}
}
}
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
以上代码定义了一个CustomException类,该类继承了Exception类。主程序中通过抛出CustomException异常来演示自定义异常的使用,并在catch代码块中捕获并打印出异常信息。程序的输出如下:
com.zhangxiuying.exception.CustomException: 自定义异常测试
at com.zhangxiuying.exception.CustomExceptionDemo.main(CustomExceptionDemo.java:6)
从输出结果中可知,自定义异常被成功抛出并在catch代码块中被捕获并打印出异常信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java异常继承结构解析_动力节点Java学院整理 - Python技术站