一、前言
今天小编在一个开源项目中看到了lombok注解@SneakyThrows ,于是探索实践了一下,有些事情还是要自己操作一下,不然还真的不知道!! 以前就看到项目里有@SneakyThrows 注解,一直没去管他和手动try catch 还有往上抛异常有什么区别? 今天就和大家一起探索一下!!
先说一下结论,赶时间的朋友看了就可以走了哈!!
我们发现,@SneakyThrows 注解在编译的时候自动帮我们try catch ,使用@SneakyThrows 是为了让代码更加简洁,加快我们的开发效率!!所以还是推荐使用@SneakyThrows 来解决异常问题,当然如果是已知异常还是自己手动throw 。
二、导入 Maven
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
三、方法测试
public class SneakyTest {
public static void main(String[] args) {
exceptionTest();
}
public static void exceptionTest(){
FileInputStream fis = new FileInputStream(new File("test.txt"));
}
}
此时Idea提醒我们要捕获异常,不然无法通过编译,给出我们三种解决方案,也就是我们本次要探究的目的!!
我们先第一种方式:
public class SneakyTest {
public static void main(String[] args) throws FileNotFoundException {
exceptionTest();
}
public static void exceptionTest() throws FileNotFoundException {
FileInputStream fis = new FileInputStream(new File("D:\\test.txt"));
}
}
我们看到我们往上级抛,上级也需要抛,这种一直抛还是要有人处理,所以我们不建议这样!
第二种方式:
public class SneakyTest {
public static void main(String[] args) {
exceptionTest();
}
public static void exceptionTest(){
try {
FileInputStream fis = new FileInputStream(new File("D:\\test.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
我们在本方法内处理,这样就不需要调用者处理了!!
第三种方式: 也是小编一直疑惑的,为啥会有这个注解,有什么优点吗??
先看解决方式,我们在编译一下看看究竟怎么解决的异常!!
public class SneakyTest {
public static void main(String[] args) {
exceptionTest();
}
@SneakyThrows
public static void exceptionTest(){
FileInputStream fis = new FileInputStream(new File("D:\\test.txt"));;
}
}
我们编译一下看一下,下面是class文件
public class SneakyTest {
public SneakyTest() {
}
public static void main(String[] args) {
exceptionTest();
}
public static void exceptionTest() {
try {
new FileInputStream(new File("D:\\test.txt"));
} catch (Throwable var1) {
throw var1;
}
}
}
我们发现,这个注解自动帮我们try catch,使用@SneakyThrows 是为了让代码更加简洁,加快我们的开发效率!!
四、总结
这样我们就测试完成了,主要介绍了@SneakyThrows 到底帮我们解决了什么问题,我们为什么要使用@SneakyThrows 。如果觉得有用一键三连走起来,小编谢谢大家了!
有缘人才可以看得到的哦!!!
点击访问!小编自己的网站,里面也是有很多好的文章哦!
|