@SneakyThrows

RuntimeException(运行时异常)是一种在程序运行时可能抛出的异常。相比于受检异常(checked exception),运行时异常不需要在方法声明中显式地被throws语句或try-catch块捕获和处理。

尽管RuntimeException不要求显式地进行异常处理,但你仍然可以使用try-catch语句来捕获并处理这些异常。通过使用try-catch语句,你可以在出现异常时采取适当的措施,例如输出错误信息、进行日志记录或执行其他必要的操作。这样可以增加程序的稳定性和可靠性,避免程序意外终止。

下面是一个使用try-catch来捕获RuntimeException的简单示例:

```
try {
    // 可能抛出RuntimeException的代码
} catch (RuntimeException e) {
    // 处理异常的逻辑,例如输出错误信息
    System.err.println("发生了运行时异常:" + e.getMessage());
}
```

总之,虽然RuntimeException不强制要求被try-catch捕获和处理,但根据实际情况,你可以选择使用try-catch来增加程序的健壮性和可维护性。

作用
@SneakyThrows就是使用该注解后不需要担心Exception的异常处理。

在说Exception之前,我们先简单聊下Error和Exception的差异

Error和Exception

Error是编译时错误和系统错误,系统错误在非特殊情况下,基本不会出现。而编译时错误,如果你使用了编译器,那么编译器会提示。

Exception则是可以被抛出的基本类型,我们需要主要关心的也是这个类。
Exception又可以根据运行时间来看,可以分为RunTimeException和其他Exception。

RunTimeException和其他Exception

其他Exception,受检查异常。可以理解为错误,必须要开发者解决以后才能编译通过,解决的方法有两种,
1:throw到上层,
2,try-catch处理。

RunTimeException:运行时异常,又称不受检查异常,不受检查,因为不受检查,所以在代码中可能会有RunTimeException时Java编译检查时不会告诉你有这个异常,但是在实际运行代码时则会暴露出来。如果不处理也会被Java处理。 例如报500异常。

@SneakyThrows的作用
现实大部分情况下的异常,我们都是一路往外抛了事。所以渐渐的java程序员处理Exception的常见手段就是外面包一层RuntimeException,接着往上丢

try{
}catch(Exception e){
throw new RuntimeException(e);
}

而Lombok的@SneakyThrows就是为了消除这样的模板代码。
使用注解后不需要担心Exception的处理
 

import lombok.SneakyThrows;
 
public class SneakyThrowsExample implements Runnable {
  @SneakyThrows(UnsupportedEncodingException.class)
  public String utf8ToString(byte[] bytes) {
    return new String(bytes, "UTF-8");
  }
  
  @SneakyThrows
  public void run() {
    throw new Throwable();
  }
}


起通过编译器生成真正的代码:

import lombok.Lombok;
 
public class SneakyThrowsExample implements Runnable {
  public String utf8ToString(byte[] bytes) {
    try {
      return new String(bytes, "UTF-8");
    } catch (UnsupportedEncodingException e) {
      throw Lombok.sneakyThrow(e);
    }
  }
  
  public void run() {
    try {
      throw new Throwable();
    } catch (Throwable t) {
      throw Lombok.sneakyThrow(t);
    }
  }
}
总结

总的来说,SneakyThrows注解就是减少了代码量,让代码看起来更加的整洁。

然后在编译的时候。Lombok会帮我们把try{}catch()再加上去。

参考:https://blog.csdn.net/qq_22162093/article/details/115486647
————————————————
版权声明:本文为CSDN博主「沛沛老爹」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m290345792/article/details/125510133

你可能感兴趣的:(java,开发语言)