java拋出異常與finally實例解析
這篇文章主要介紹了java拋出異常與finally實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

代碼如下:
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");
}
}
}

運行結(jié)果如上圖:
對于代碼的分析: 前三行輸出結(jié)果,是try中三個正常的輸出語句,并且在最后拋出了一個by zero錯誤。然后用catch語句捕捉了這個語句,并且輸出了語句。但我們會發(fā)現(xiàn)后面的catch語句都沒有被執(zhí)行,而是直接執(zhí)行了finally語句,說明finally語句改變了代碼中輸出的邏輯。但具體的原因尚不明確。
最后,提出一個小問題:finally語句一定會執(zhí)行嗎?
我姑且自己回答一下,如果在finally之前使用了exit,退出了程序,那么finally語句就不會執(zhí)行了。
比如,我們用以下的測試代碼:
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");
}
}
}
運行結(jié)果如圖:

我們可以看到,finally后的語句并沒有被輸出,而在退出程序前的語句并沒有任何影響。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?IOC?xml方式進(jìn)行工廠Bean操作詳解
這篇文章主要介紹了Spring?IOC?xml方式進(jìn)行工廠Bean操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
Java基本數(shù)據(jù)類型存儲在JVM中的存儲位置介紹
這篇文章主要介紹了Java基本數(shù)據(jù)類型存儲在JVM中的存儲位置,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
Springboot?HTTP如何調(diào)用其他服務(wù)
這篇文章主要介紹了Springboot?HTTP如何調(diào)用其他服務(wù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
Maven報錯之導(dǎo)入Junit包來實現(xiàn)@Test注解問題
這篇文章主要介紹了Maven報錯之導(dǎo)入Junit包來實現(xiàn)@Test注解問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
Java8函數(shù)式接口Predicate用法示例詳解
這篇文章主要為大家介紹了Java8函數(shù)式接口Predicate用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

