Java异常继承结构解析_动力节点Java学院整理

  

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代码块中被捕获并打印出异常信息。

相关文章