extends Exception和extends RuntimeException有什么区别

80 阅读3分钟

在这里插入图片描述

说明

首先我们知道Exception是所有异常的父类,可分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。

  • 受检异常是在编译阶段必须被处理的异常,否则会导致编译错误。例如IOException、SQLException等。
  • 非受检异常在编译阶段不需要被显式处理,包括RuntimeException及其子类。

extends Exception的异常是受检异常(Checked Exception)

通常需要在代码中使用try-catch块进行捕获处理,或者在方法签名中使用throws关键字声明该方法可能抛出这些异常,由调用者进行处理。例如:

public class TestException extends Exception{
    public TestException(String message) {
        super(message);
    }
}

public void test() throws TestException {
    // 可能抛出受检异常的代码
}

extends RuntimeException的异常是非受检异常(Unchecked Exception),也被称为运行时异常。

它通常是由于程序中的逻辑错误或不当的编程实践引起的,比如空指针异常NullPointerException、数组越界异常ArrayIndexOutOfBoundsException等; 在方法签名中不需要声明可能抛出此类异常,编译器不会强制要求进行处理。例如:

public class TestException extends RuntimeException{
    public TestException(String message) {
        super(message);
    }
}

public void test() {
    // 可能抛出受检异常的代码
    throw new TestException();
}

常见的受检异常(Checked Exceptions)

IOException(输入输出异常):

  • 发生在进行输入输出操作时出现问题,比如读取文件、网络通信等。
  • 例如,FileNotFoundException是IOException的子类,当尝试打开一个不存在的文件时会抛出。
  • 处理方式通常是使用try-catch块捕获异常,或者在方法签名中声明抛出该异常,让调用者处理。

SQLException(数据库操作异常):

  • 在与数据库进行交互时发生错误会抛出此异常。
  • 可能的原因包括数据库连接问题、SQL 语法错误、数据库服务器故障等。
  • 开发人员需要在代码中处理这个异常,以确保数据库操作的稳定性。

常见的非受检异常(Unchecked Exceptions)

NullPointerException(空指针异常):

  • 当程序试图在一个空对象引用上执行操作时抛出。
  • 这是最常见的运行时异常之一,通常是由于程序员没有正确检查对象是否为 null 就进行操作导致的。
  • 例如,调用一个 null 对象的方法或者访问 null 对象的字段。

ArrayIndexOutOfBoundsException(数组下标越界异常):

  • 当程序试图访问数组中不存在的下标时抛出。
  • 比如,一个长度为 5 的数组,尝试访问下标为 5 或更大的位置。

ArithmeticException(算术异常):

  • 通常在算术运算出现问题时抛出,比如除以零。
  • 例如,int a = 5 / 0;会导致ArithmeticException被抛出。

ClassNotFoundException(类未找到异常):

  • 当程序试图加载一个类但找不到该类时抛出。
  • 通常发生在使用反射或者动态加载类的时候。

NoSuchMethodException(方法未找到异常):

  • 当程序试图调用一个不存在的方法时抛出。
  • 可能是由于方法名拼写错误、参数类型不匹配或者调用了错误的对象上的方法。

IllegalArgumentException(非法参数异常):

  • 当方法接收到一个不合法的参数时抛出。
  • 例如,传递一个负数给一个只接受正数的方法。

NumberFormatException(数字格式异常):

  • 当试图将一个字符串转换为数字类型但字符串格式不正确时抛出。
  • 比如,Integer.parseInt("abc");会抛出NumberFormatException。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力! 在这里插入图片描述