说明
首先我们知道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。
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!