📜  异常中的超类是什么 (1)

📅  最后修改于: 2023-12-03 15:09:48.456000             🧑  作者: Mango

异常中的超类是什么

在Java中,所有的异常类都是从Throwable这个超类继承而来的。

Throwable类

Throwable类是Java中所有异常类的超类,它本身也是一个可实例化的类。此类及其子类是检查性异常,也就是说,编译时将检查是否为其声明抛出的异常。它包含了构造器,以及获取和设置异常消息、原因以及堆栈跟踪信息的方法。

代码片段:

public class Throwable extends Object implements Serializable {
    private static final long serialVersionUID = -3042686055658047285L;
    
    private String message;
    private Throwable cause;
    private transient Throwable[] suppressedExceptions;
    private StackTraceElement[] stackTrace;
    //...
}
RuntimeException

RuntimeException是一种非检查性异常,它和其他异常类不同,不需要在方法声明中声明抛出它的可能性。RuntimeException及其子类的异常在程序运行时可能发生,例如,NullPointerException和ArithmeticException等。

代码片段:

public class RuntimeException extends Exception {
    private static final long serialVersionUID = -7034897190745766939L;
    
    public RuntimeException() {
        super();
    }
    
    public RuntimeException(String message, Throwable cause) {
        super(message, cause);
    }
    
    public RuntimeException(String message) {
        super(message);
    }
    
    public RuntimeException(Throwable cause) {
        super(cause);
    }
    
    protected RuntimeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
Checked Exception

除了RuntimeException及其子类之外的所有异常类都被称为检查性异常。这些异常都需要在方法声明中声明可能抛出它们的可能性,或捕获或传递它们。IOException是一种典型的检查性异常,表示可能发生的I/O错误。

代码片段:

public class IOException extends Exception {
    static final long serialVersionUID = 7818375828146090155L;
    
    public IOException() {
        super();
    }
    
    public IOException(String message) {
        super(message);
    }
    
    public IOException(String message, Throwable cause) {
        super(message, cause);
    }
    
    public IOException(Throwable cause) {
        super(cause);
    }
}

在处理异常时,我们需要根据不同的异常类型采取不同的处理机制。只有掌握了各种异常类型的特点,才能更好地编写程序,并更好地调试和维护代码。