1??梢栽诜椒ê灻霞由袭惓ublic T method1() throws AException {try{}catch(BExcption e) {throw new AException();}}2??梢栽俅尾东@異常public T method1(){try{}catch(BExcption e) {try{ doSomething();//這個語句可能拋出異常}catch(AException ex) { ...}}}
java中try,catch,finally的用法,以前感覺還算熟悉,但看到一篇博文才有更深點的理解,總結網友博客如下。
Java異常處理的組合方式:
1.try+catch 運行流程:運行到try塊中,如果有異常拋出,則轉到catch塊去處理。然后執行catch塊后面的語句2.try+catch+finally
運行流程:運行到try塊中,如果有異常拋出,則轉到catch塊,catch塊執行完畢后,執行finally塊的代碼,再執行finally塊后面的代碼。如果沒有異常拋出,執行完try塊,也要去執行finally塊的代碼。然后執行finally塊后面的語句
3.try+finally 運行流程:運行到try塊中,如果有異常拋出的話,程序轉向執行finally塊的代碼。那末finally塊后面的代碼還會被執行嗎?不會!因為你沒有處理異常,所以遇到異常后,執行完finally后,方法就以拋出異常的方式退出。 這種方式中要注意的是,由于你沒有捕獲異常,所以要在方法后面聲明拋出異常。共同點:1.在catch塊和finally塊中仍然可以再拋出新的異常例如 throw new Exception("illegal invoked");如果對于新拋出的異常沒有寫try的話,則要在方法后面聲明拋出異常反之,如果給catch塊或finally塊里的異常再套上一層try,catch的話,方法后面就不必聲明異常了。
問題:try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?
我們來看下面代碼:
[java] view plain copypublic class Test { /** * @param args add by zxx ,Dec 9, 2008 */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.PRintln(new Test().test());; } static int test() { int x = 1; try { return x; } finally { ++x; } } } ---------執行結果 ---------1[java] view plain copypublic class smallT { public static void main(String args[]) { smallT t = new smallT(); int b = t.get(); System.out.println(b); } public int get() { try { return 1 ; } finally { return 2 ; } } } ---------執行結果 ---------2[java] view plain copypublic class Test { /** * @param args add by zxx ,Dec 9, 2008 */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(new Test().test());; } int test() { try { return func1(); } finally { return func2(); } } int func1() { System.out.println("func1"); return 1; } int func2() { System.out.println("func2"); return 2; } } -----------執行結果-----------------func1func22分析:
從上面3個例子的運行結果中可以發現,try中的return語句調用的函數先于finally中調用的函數執行,也就是說return語句先執行,finally語句后執行。Return并不是讓函數馬上返回,而是return語句執行后,將把返回結果放置進函數棧中,此時函數并不是馬上返回,它要執行finally語句后才真正開始返回。
新聞熱點
疑難解答