这应该是记住就好了。那我先说下我的总结,后面给出一道题。
结论如下:
catch部分存在return时,先去执行finally部分,再回来执行return语句,并且finally语句块后的语句就不执行了。
试题:请给出下面答案:
public class Test {
public static String output = "";
public static void foo(int i){
try{
if(i == 1){
throw new Exception();
}
output += "1";
}
catch (Exception e){
output += "2";
return;
}
finally {
output +="3";
}
output +="4";
}
public static void main(String[] args) {
foo(0);
foo(1);
System.out.println(output);
}
}
答案是13423,如果去掉return语句,答案才是134234。又或者把return语句,换为System.exit(0),那结果就是正常编译但什么都没有输出。
此题来自微信读书的一本书,如下;