“二哥,你看着这鬼代码,竟然在 for 循环里面搞了个 try-catch
,不知道try-catch
有性能损耗吗?” 老王煞有其事地指着屏幕里的代码:
for (int i = 0; i < 5000; i++) {
try {
dosth
} catch (Exception e) {
e.printStackTrace();
}
}
“二哥,你看着这鬼代码,竟然在 for 循环里面搞了个 try-catch
,不知道try-catch
有性能损耗吗?” 老王煞有其事地指着屏幕里的代码:
for (int i = 0; i < 5000; i++) {
try {
dosth
} catch (Exception e) {
e.printStackTrace();
}
}
空指针,号称天下最强刺客。
他原本不叫这个名字,空指针原本复姓异常,空指针只不过是他的武器,但他杀戮过多,渐渐地人们只记住了空指针这三个字。
天下武功,唯快不破,空指针的针,以快和诡异著称,稍有不慎,便是伤亡。
... ...
我叫王二,我来到这个奇怪的世界已经一年了,我等了一年,穿越附赠的老爷爷、戒指、系统什么的我到现在都没发现。
而且这个世界看起来也太奇怪了,这里好像叫什么 Java 大陆,我只知道这个世界的最强者叫做 Object,听说是什么道祖级的存在,我也不知道是什么意思,毕竟我现在好像还是个菜鸡,别的主角一年都应该要飞升仙界了吧,我还连个小火球都放不出来。
“三妹啊,今天我来给你传授 20 个异常处理的最佳实践经验,以免你以后在开发中采坑。”我面带着微笑对三妹说。
“好啊,二哥,我洗耳恭听。”三妹也微微一笑,欣然接受。
“好,那哥就不废话了。开整。”
阿里出品的 Java 开发手册上这样规定:
尽量不要 catch RuntimeException,比如 NullPointerException、IndexOutOfBoundsException 等等,应该用预检查的方式来规避。
“二哥,今天就要学习异常了吗?”三妹问。
“是的。只有正确地处理好异常,才能保证程序的可靠性,所以异常的学习还是很有必要的。”我说。
“那到底什么是异常呢?”三妹问。
“异常是指中断程序正常执行的一个不确定的事件。当异常发生时,程序的正常执行流程就会被打断。一般情况下,程序都会有很多条语句,如果没有异常处理机制,前面的语句一旦出现了异常,后面的语句就没办法继续执行了。”
“有了异常处理机制后,程序在发生异常的时候就不会中断,我们可以对异常进行捕获,然后改变程序执行的流程。”
“除此之外,异常处理机制可以保证我们向用户提供友好的提示信息,而不是程序原生的异常信息——用户根本理解不了。”
“二哥,终于等到你讲 try-with-resources 了!”三妹夸张的表情让我有些吃惊。
“三妹,不要激动呀!开讲之前,我们还是要来回顾一下 try–catch-finally,好做个铺垫。”我说,“来看看这段代码吧。”
public class TrycatchfinallyDecoder {
public static void main(String[] args) {
BufferedReader br = null;
try {
String path = TrycatchfinallyDecoder.class.getResource("/牛逼.txt").getFile();
String decodePath = URLDecoder.decode(path,"utf-8");
br = new BufferedReader(new FileReader(decodePath));
String str = null;
while ((str =br.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}