您好,登錄后才能下訂單哦!
這篇文章主要介紹了java拋出異常與finally實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
代碼如下:
package test1; public class EmbededFinally { public static void main(String args[]) { int result; try { System.out.println("in Level 1"); try { System.out.println("in Level 2"); // result=100/0; //Level 2 try { System.out.println("in Level 3"); result=100/0; //Level 3 } catch (Exception e) { System.out.println("Level 3:" + e.getClass().toString()); } finally { System.out.println("In Level 3 finally"); } // result=100/0; //Level 2 } catch (Exception e) { System.out.println("Level 2:" + e.getClass().toString()); } finally { System.out.println("In Level 2 finally"); } // result = 100 / 0; //level 1 } catch (Exception e) { System.out.println("Level 1:" + e.getClass().toString()); } finally { System.out.println("In Level 1 finally"); } } }
運行結果如上圖:
對于代碼的分析: 前三行輸出結果,是try中三個正常的輸出語句,并且在最后拋出了一個by zero錯誤。然后用catch語句捕捉了這個語句,并且輸出了語句。但我們會發現后面的catch語句都沒有被執行,而是直接執行了finally語句,說明finally語句改變了代碼中輸出的邏輯。但具體的原因尚不明確。
最后,提出一個小問題:finally語句一定會執行嗎?
我姑且自己回答一下,如果在finally之前使用了exit,退出了程序,那么finally語句就不會執行了。
比如,我們用以下的測試代碼:
package test1; public class SystemExitAndFinally { public static void main(String[] args) { try{ System.out.println("in main"); throw new Exception("Exception is thrown in main"); //System.exit(0); } catch(Exception e) { System.out.println(e.getMessage()); System.exit(0); } finally { System.out.println("in finally"); } } }
運行結果如圖:
我們可以看到,finally后的語句并沒有被輸出,而在退出程序前的語句并沒有任何影響。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。