如下代碼,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很肯爹有木有!)