今天看到一段视频讲try catch finally,然后觉得不错,就把其中的内容再写一遍
这里主要讲一道题:
try{}里有一个return语句,那么紧跟在try后的finally{}里的代码会不会被执行,什么时候被执行
a. 不会执行
b. 会执行,在return前执行
c. 会执行,在return后执行
d. 会执行,可能在return前执行,也可能在return后执行
下面是一段示例代码:
package exercise;
public class trycatch {
public void demo01() {
try{
System.out.println("try.......");
//Integer.parseInt("java");
return;
}catch(Exception e){
System.out.println("catch........");
e.printStackTrace();
}finally{
System.out.println("finally........");
}
}
public static void main(String[] args) {
trycatch try1 = new trycatch();
try1.demo01();
}
}
执行结果:
try.......
finally........
这表明,finally{}是在return之前执行的,所以选B
若是把注释掉的那行代码的注释去掉,执行结果:
try.......
catch........
java.lang.NumberFormatException: For input string: "java"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at exercise.trycatch.demo01(trycatch.java:8)
at exercise.trycatch.main(trycatch.java:20)
finally........
这里处理异常以后,就不会再执行return了
原理(原因):
finally{}中一般用来释放资源(例如:connection close,流的关闭等),所以应先释放资源再return;
无论是否有异常,都会执行finally中的语句
其他:
健壮性的一个保证(JDBC:捕获sql语句异常)