1.finally 块必然执行,不论发生异常与否,也不论在 finally 之前是否有return。
2.不管在 try 块中还是在 catch 块中包含 return,finally 块总是在 return 之前执行。
3.如果 finally 块中有return,那么 try 块和 catch 块中的 return 就没有执行机会了。
当在 catch 块和 finally 块同时return的时候,到底会return什么呢?
public static int testFinally1() {
try {
Integer.parseInt("exception here");
} catch (Exception e) {
System.out.println("catch block 1");
return 11;
} finally {
System.out.println("finally block 1");
return 12;
}
}
上面的方法,return的是12。先输出catch block 1,然后输出finally block 1,最后返回12。
public static void main(String[] args) {
System.out.println(testFinally3());
}
public static int testFinally3() {
try {
System.out.println("start");
Integer.parseInt("testFinally3");
System.out.println("never run");
} catch (Exception e) {
System.out.println("catch block 3");
return iamReturn();
} finally {
System.out.println("finally block 3");
}
return 31;
}
public static int iamReturn() {
System.out.println("return block");
return 666;
}
start
catch block 3
return block
finally block 3
666
网友评论