1 @SneakyThrows
@SneakyThrows 是 Lombok 提供的注解之一,用于在方法上自动添加异常处理。它的作用是在方法体中自动捕获并处理异常,将异常转换为非受检异常(Unchecked Exception)并抛出。
使用 @SneakyThrows 注解可以简化代码,避免在方法体中显式地编写 try-catch 块来处理异常。当方法中的代码抛出受检异常时,@SneakyThrows 会自动将异常转换为非受检异常并抛出,从而避免了在方法签名中声明受检异常或在方法体中显式处理异常的繁琐操作。
需要注意的是,@SneakyThrows 注解只能用于方法上,不能用于字段或构造函数。它只能处理已检查异常(Checked Exception),对于运行时异常(RuntimeException)无效。
以下是一个示例代码,演示了如何使用 @SneakyThrows 注解:
import lombok.SneakyThrows;
public class Example {
@SneakyThrows
public void doSomething() {
// 可能会抛出受检异常的代码
}
}
在上述示例中,doSomething() 方法可能会抛出受检异常,但是使用了 @SneakyThrows 注解后,就不需要在方法体中显式地处理异常了。如果方法中的代码抛出了受检异常,@SneakyThrows 会自动将其转换为非受检异常并抛出。
(了解非受检异常和受检异常后续就不需要看了)
两个概念:非受检异常和受检异常
"非受检异常"通常指的是在编程中发生的一些异常情况,这些异常情况通常不会在代码中明确声明或捕获,因此被称为“非受检异常”或“运行时异常”。
在Java中,非受检异常通常是RuntimeException及其子类的实例。与受检异常(checked exception)不同,非受检异常不需要在方法签名中显式声明,也不需要使用try-catch块来捕获或处理。这使得开发者可以更灵活地处理异常情况,但也需要更加小心,因为这些异常往往反映了程序中的逻辑错误或运行时环境的问题。
比如:
1.NullPointerException(空指针异常):当试图在一个空对象上调用方法或访问属性时,会抛出NullPointerException。
2.ArrayIndexOutOfBoundsException(数组越界异常): 当尝试访问数组中不存在的索引。
3.ArithmeticException(算术异常): 当进行不合法的算术运算。
对于非受检异常,通常的建议是在程序中尽量避免引发这些异常,因为它们通常表示代码中存在问题。此外,如果确实发生了非受检异常,最好的处理方式是让程序崩溃并尽快修复代码,而不是试图捕获并继续执行可能处于不确定状态的程序。
受检异常
与非受检异常相对的概念是受检异常(Checked Exception)。受检异常是在Java中的异常体系中的一类异常,它们是Exception的直接子类,但不是RuntimeException的子类。与非受检异常不同,受检异常在代码中必须进行明确的声明或捕获,否则编译器会报错。
受检异常通常表示一些在程序中可能会发生的、需要程序员注意和处理的异常情况,例如文件不存在、网络连接失败等。这种异常的出现不一定是代码错误,但程序员需要通过try-catch块或者在方法签名中使用throws关键字明确地处理这些异常。
比如:
1.IOException(输入输出异常): 表示在输入输出操作中可能发生的异常情况,比如文件读写时可能发生的错误。
2.SQLException(SQL数据库访问异常): 表示在与数据库交互时可能发生的异常,比如执行SQL查询时出现问题。
3.ClassNotFoundException(类未找到异常): 表示在运行时无法找到所需的类。
总结
非受检异常(Unchecked Exception)和受检异常(Checked Exception)是 Java 编程语言中异常的两个主要类别。它们在处理和捕获方式上有一些重要的区别。