您好,登錄后才能下訂單哦!
這篇文章主要介紹了java拋出異常與finally實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
代碼如下:
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"); } } }
運(yùn)行結(jié)果如上圖:
對(duì)于代碼的分析: 前三行輸出結(jié)果,是try中三個(gè)正常的輸出語(yǔ)句,并且在最后拋出了一個(gè)by zero錯(cuò)誤。然后用catch語(yǔ)句捕捉了這個(gè)語(yǔ)句,并且輸出了語(yǔ)句。但我們會(huì)發(fā)現(xiàn)后面的catch語(yǔ)句都沒(méi)有被執(zhí)行,而是直接執(zhí)行了finally語(yǔ)句,說(shuō)明finally語(yǔ)句改變了代碼中輸出的邏輯。但具體的原因尚不明確。
最后,提出一個(gè)小問(wèn)題:finally語(yǔ)句一定會(huì)執(zhí)行嗎?
我姑且自己回答一下,如果在finally之前使用了exit,退出了程序,那么finally語(yǔ)句就不會(huì)執(zhí)行了。
比如,我們用以下的測(cè)試代碼:
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"); } } }
運(yùn)行結(jié)果如圖:
我們可以看到,finally后的語(yǔ)句并沒(méi)有被輸出,而在退出程序前的語(yǔ)句并沒(méi)有任何影響。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。