案例详解Try, catch, finally 语句块中加入return 的执行顺序
这个案例是以文件读取来测试Try catch finally 语句块的执行顺序,以及在各自从句中加入return 语句来观察执行顺序的改变:
代码案例如下:
public static String testTryCatch() {
File file = new File("C:\\Users\\mdrk73\\Downloads\\test\\test.txt");
FileReader fr=null;
try {
System.out.println("==== try read file content :=====");
fr = new FileReader(file);
System.out.println(fr.read());
return "step1";
} catch (FileNotFoundException e) {
System.out.println("==== Catch FileNotFoundException===");
e.printStackTrace();
return "step2";
} catch (IOException e) {
System.out.println("==== Catch IOException===");
e.printStackTrace();
return "step3";
}finally {
if(fr!=null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("==== finally===");
return "finally-return"; //如果在finally里面加return,那么try 和catch从句中的return 语句都不会被执行。
}
}
Result 1: 当try语句块中没有异常的执行结果。
Result 2:当try语句中捕获到FileNotFoundException 时的执行结果。
Result 3:在finally语句块中放入return 语句的执行结果
总结:
1.在Try 语句块中无论是否发生异常,finally语句块都执行。可查看 result 1 & result 2
2.在finally语句块中放置return语句将会导致Try,catch从句中的return语句无法执行。一般不在finally语句中放return 语句。可查看 result 3.