解讀java?try?catch?異常后還會繼續(xù)執(zhí)行嗎
java try catch異常后還會繼續(xù)執(zhí)行嗎
catch中如果你沒有再拋出異常,那么catch之后的代碼是可以繼續(xù)執(zhí)行的,但是try中,報錯的那一行代碼之后 一直到try結(jié)束為止的這一段代碼 , 是不會再執(zhí)行的。
//代碼1 public static void test() throws Exception ?{ ? ? throw new Exception("參數(shù)越界");? ? ? System.out.println("異常后"); //編譯錯誤,「無法訪問的語句」 }
//代碼2 try{ ? ? throw new Exception("參數(shù)越界");? }catch(Exception e) { ? ? e.printStackTrace(); } System.out.println("異常后");//可以執(zhí)行
//代碼3 if(true) { ? ? throw new Exception("參數(shù)越界");? } System.out.println("異常后"); //拋出異常,不會執(zhí)行
小結(jié)下
若一段代碼前有異常拋出,并且這個異常沒有被捕獲,這段代碼將產(chǎn)生編譯時錯誤「無法訪問的語句」。如代碼1;
若一段代碼前有異常拋出,并且這個異常被try…catch所捕獲,若此時catch語句中沒有拋出新的異常,則這段代碼能夠被執(zhí)行,否則,同第1條。如代碼2;
若在一個條件語句中拋出異常,則程序能被編譯,但后面的語句不會被執(zhí)行。如代碼3
try-catch塊捕獲異常三種情況
第一種情況
try塊中所有語句正常執(zhí)行完畢,不會發(fā)生異常,那么catch塊中的所有語句都將會被忽略
第二種情況
try語句塊在執(zhí)行中遇到異常,那么在try塊中其余剩下的代碼都將被忽略,系統(tǒng)會自動生成相應(yīng)的異常對象,如果這個異常對象與catch中聲明的異常類型相匹配,則相應(yīng)的catch塊將會被執(zhí)行
第三種情況
try語句塊在執(zhí)行中遇到異常,如果這個異常對象與catch中聲明的異常類型不匹配,程序會中斷。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java開發(fā)RocketMQ之NameServer路由管理源碼分析
這篇文章主要為大家介紹了java開發(fā)中RocketMQ之NameServer路由管理源碼分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11SpringBoot如何使用RateLimiter通過AOP方式進(jìn)行限流
這篇文章主要介紹了SpringBoot如何使用RateLimiter通過AOP方式進(jìn)行限流,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06淺談Java代理(jdk靜態(tài)代理、動態(tài)代理和cglib動態(tài)代理)
下面小編就為大家?guī)硪黄獪\談Java代理(jdk靜態(tài)代理、動態(tài)代理和cglib動態(tài)代理)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01Spring基于常用AspectJ切點表達(dá)式使用介紹
AspectJ是一個基于Java語言的AOP框架,使用AspectJ需要導(dǎo)入Spring?AOP和AspectJ相關(guān)jar包,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12