try-catch-finally中,如果在catch中return了,finally中的程式碼還會執行麼,原理是什麼?(異常相關四)
阿新 • • 發佈:2019-01-07
答案:會執行,在return 前執行
/* * java面試題20--如果catch裡面有return語句,finally裡面的程式碼還會執行嗎? */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; /* * return a 在程式執行到這一步的時候,這裡不是return a 而是 return 30;這個返回路徑就形成了 * 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40 * 再次回到以前的路徑,繼續走return 30,形成返回路徑之後,這裡的a就不是a變量了,而是常量30 */ } finally { a = 40; } // return a; } }
執行結果:30
package com.java_02; /* * java面試題20--如果catch裡面有return語句,finally裡面的程式碼還會執行嗎? */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; /* * return a 在程式執行到這一步的時候,這裡不是return a 而是 return 30;這個返回路徑就形成了 * 但是呢,它發現後面還有finally,所以繼續執行finally的內容,a=40 * 再次回到以前的路徑,繼續走return 30,形成返回路徑之後,這裡的a就不是a變量了,而是常量30 */ } finally { a = 40; return a; //如果這樣,就又重新形成了一條返回路徑,由於只能通過1個return返回,所以這裡直接返回40 } // return a; } }
執行結果:40