如下代码,finally里的代码是否会执行?
public class MainQueue {
public static void main(String args[]) {
System.out.println(MainQueue.test());
}
public static int test() {
try {
return 0;
} finally {
System.out.println("finally trumps return.");
}
}
}
答案是会执行,而且是先执行finally里的代码,然后再返回return语句!
但是,有两种情况下finally是不会执行的:
(1)调用了System.exit()。
(2)JVM在finally之前就挂了,注意是JVM挂了,而不是指程序异常,比如即使在finally之前有空指针异常,finally里的代码依然会执行的。
(此处插个题外话,在JDK1.7及其之后的版本的switch语句都支持String case语句了,其以前的都只能用int很肯爹有木有!)