要弄清finally到底是什么時候執行的,那就一定要把try catch return放在一起來比較了。
實驗代碼:
public static int ff(){ Scanner scanner = new Scanner(System.in); String str=scanner.next(); try { int i=Integer.valueOf(str); i++; System.out.println("try"); }catch (NumberFormatException e) { System.out.println("catch"); return 1; }finally { System.out.println("finally"); return 0; } } public static void main(String[] args) { System.out.println(ff()); }
這個代碼你在控制台輸入數字就進入try里面,輸入字母,就進入catch里面。
大家可以分情況來試驗一下,比如什么try里面有return,finally里面有return,到底返回那個return值的問題。
我的結論:
1.執行順序,try->finally->return,或者try->catch->finally->return
2.finally如果有return,這一定是返回finally里面return的值,即使其他地方有return,會執行return的代碼,但不會返回