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