JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析
一、出現(xiàn)異常時(shí),try-catch對(duì)代碼執(zhí)行的影響
1.1、不加try-catch
//情形1:不加try-catch,出現(xiàn)異常,后續(xù)代碼不再執(zhí)行
@Test
public void test1() {
String a = null;
int c = 0;
int b = a.length(); //null沒(méi)有l(wèi)ength()方法,報(bào)空指針異常錯(cuò)誤
//下面兩條賦值語(yǔ)句不會(huì)執(zhí)行
System.out.println("c的值為:" + c);
}結(jié)果如下:

結(jié)論:
1、System.out.println("c的值為:" + c);不執(zhí)行
2、不加try-catch,出現(xiàn)異常,后續(xù)代碼不再執(zhí)行
1.2、加上try-catch
//情形2:加上try-catch,出現(xiàn)異常,try中出現(xiàn)異常的那一行代碼的后續(xù)代碼不再執(zhí)行
//catch中的代碼正常執(zhí)行
@Test
public void test2() {
String a = null;
int c = 0, d = 0;
try {
int b = a.length(); //null沒(méi)有l(wèi)ength()方法,報(bào)空指針異常錯(cuò)誤
//下面兩條賦值語(yǔ)句不會(huì)執(zhí)行
c = 1;
d = 2;
} catch (Exception e) {
System.out.println("c的值為:" + c);
}
System.out.println("d的值為:" + d); //本條語(yǔ)句會(huì)執(zhí)行
}結(jié)果如下:

結(jié)論:
1、加上try-catch,出現(xiàn)異常時(shí),try中出現(xiàn)異常的那一行代碼的后續(xù)代碼不再執(zhí)行
2、catch中的代碼正常執(zhí)行,并且catch之后的代碼也會(huì)執(zhí)行
1.3、 加上try-catch,并在try中拋出現(xiàn)異常
//情形3:加上try-catch,并在try中拋出現(xiàn)異常,
// try中拋出異常的那一行代碼的后續(xù)代碼不再執(zhí)行
//catch中的代碼正常執(zhí)行
@Test
public void test3() {
String a = null;
int c = 0, d = 0;
try {
if (a == null) {
throw new RuntimeException("a的值不能是空");
}
//下面兩條賦值語(yǔ)句不會(huì)執(zhí)行
c = 1;
d = 2;
} catch (Exception e) {
System.out.println("c的值為:" + c); //會(huì)執(zhí)行
}
System.out.println("d的值為:" + d); //會(huì)執(zhí)行
}結(jié)果如下:

結(jié)論:
1、加上try-catch,并在try中拋出現(xiàn)異常,try中拋出異常的那一行代碼的后續(xù)代碼不再執(zhí)行
2、catch中的代碼正常執(zhí)行,并且catch之后的代碼也會(huì)執(zhí)行
1.4、加上try-catch,并在catch中拋出現(xiàn)異常
//情形4:加上try-catch,并在catch中拋出現(xiàn)異常,
//try中出現(xiàn)異常的那一行代碼的后續(xù)代碼不再執(zhí)行
//catch中的代碼只執(zhí)行throw之前的代碼
@Test
public void test4() {
String a = null;
int c = 0, d = 0;
try {
int b = a.length(); //null沒(méi)有l(wèi)ength()方法,報(bào)空指針異常錯(cuò)誤
//下面兩條賦值語(yǔ)句不會(huì)執(zhí)行
c = 1;
d = 2;
} catch (Exception e) {
System.out.println("c的值為:" + c);
throw new RuntimeException(e);
}
System.out.println("d的值為:" + d); //本條語(yǔ)句也不執(zhí)行
}結(jié)果如下:

結(jié)論:
1、加上try-catch,并在catch中拋出現(xiàn)異常,try中出現(xiàn)異常的那一行代碼的后續(xù)代碼不再執(zhí)行。
2、catch中的代碼只執(zhí)行throw之前的代碼
二、循環(huán)時(shí)出現(xiàn)異常后續(xù)代碼是否執(zhí)行
我們需要明確的一點(diǎn)是,當(dāng)出現(xiàn)異常時(shí),Java中的for循環(huán)默認(rèn)會(huì)停止執(zhí)行,不會(huì)進(jìn)行下一次循環(huán)。
2.1、循環(huán)中不加try-catch
//不加try-catch,當(dāng)循環(huán)中出現(xiàn)異常時(shí),循環(huán)會(huì)終止,不會(huì)繼續(xù)下一次循環(huán)
@Test
public void test5() {
String title = "我要拿高薪";
for (int i = 0; i < title.length(); i++) {
System.out.println("執(zhí)行了第" + i + "次");
int j = 1 / 0;
}
}結(jié)果如下:

結(jié)論:
不加try-catch,當(dāng)循環(huán)中出現(xiàn)異常時(shí),循環(huán)會(huì)終止,不會(huì)繼續(xù)下一次循環(huán)
2.2、循環(huán)中加try-catch
//加try-catch,當(dāng)循環(huán)中出現(xiàn)異常時(shí),循環(huán)會(huì)終止,不會(huì)繼續(xù)下一次循環(huán)
@Test
public void test6() {
String title = "我要拿高薪";
try {
for (int i = 0; i < title.length(); i++) {
System.out.println("執(zhí)行了第" + i + "次");
int j = 1 / 0;
}
} catch (Exception e) {
System.out.println("循環(huán)中出現(xiàn)了異常:" + e);
}
}結(jié)果如下:

結(jié)論:
加try-catch,當(dāng)循環(huán)中出現(xiàn)異常時(shí),循環(huán)會(huì)終止,不會(huì)繼續(xù)下一次循環(huán)
2.3、加try-catch,并在catch中將異常拋出
//加try-catch,并在catch中將異常拋出
//當(dāng)循環(huán)中出現(xiàn)異常時(shí),循環(huán)會(huì)終止,不會(huì)繼續(xù)下一次循環(huán)
@Test
public void test7() {
String title = "我要拿高薪";
try {
for (int i = 0; i < title.length(); i++) {
System.out.println("執(zhí)行了第" + i + "次");
int j = 1 / 0;
}
} catch (Exception e) {
System.out.println("循環(huán)中出現(xiàn)了異常:" + e);
throw e;
}
}結(jié)果如下:

結(jié)論:
加try-catch,并在catch中將異常拋出,當(dāng)循環(huán)中出現(xiàn)異常時(shí),循環(huán)會(huì)終止,不會(huì)繼續(xù)下一次循環(huán)
2.4、在for循環(huán)中加上嵌套try-catch并使用continue
@Test
public void test8() {
String title = "我要拿高薪";
try {
for (int i = 0; i < title.length(); i++) {
try {
System.out.println("執(zhí)行了第" + i + "次");
int j = 1 / 0;
} catch (Exception e) {
System.out.println("循環(huán)中出現(xiàn)了異常:" + e);
continue;
}
}
} catch (Exception e) {
System.out.println("循環(huán)中出現(xiàn)了異常:" + e);
}
}結(jié)果如下:


結(jié)論:
在for循環(huán)中加上嵌套try-catch,并在catch中使用continue,可以使循環(huán)一直執(zhí)行下去。
三、調(diào)用的方法內(nèi)部出現(xiàn)異常
3.1、調(diào)用的方法內(nèi)部出現(xiàn)異常
@Test
public void test9() {
try {
save1();
} catch (Exception e) {
System.out.println("循環(huán)中出現(xiàn)了異常:" + e);
}
}
public void save1() {
System.out.println("我要當(dāng)高級(jí)JAVA開(kāi)發(fā)工程師");
int i = 1 / 0;
}結(jié)果如下:

結(jié)論:
方法內(nèi)部不對(duì)異常做任何處理,調(diào)用處的catch可以捕獲到異常。
3.2、調(diào)用的方法內(nèi)部出現(xiàn)異常并捕獲
@Test
public void test9() {
try {
save2();
} catch (Exception e) {
System.out.println("循環(huán)中出現(xiàn)了異常:" + e);
}
}
public void save2() {
try {
System.out.println("我要當(dāng)高級(jí)JAVA開(kāi)發(fā)工程師");
int i = 1 / 0;
} catch (Exception e) {
System.out.println("方法內(nèi)部出現(xiàn)了異常" + e);
}
}結(jié)果如下:

結(jié)論:
方法內(nèi)部對(duì)異常進(jìn)行捕獲,調(diào)用處的catch不能捕獲到異常。
3.3、調(diào)用的方法內(nèi)部出現(xiàn)異常并捕獲最后拋出
@Test
public void test9() {
try {
save3();
} catch (Exception e) {
System.out.println("循環(huán)中出現(xiàn)了異常:" + e);
}
}
public void save3() {
try {
System.out.println("我要當(dāng)高級(jí)JAVA開(kāi)發(fā)工程師");
int i = 1 / 0;
} catch (Exception e) {
System.out.println("方法內(nèi)部出現(xiàn)了異常" + e);
throw e;
}
}結(jié)果如下:

結(jié)論:
方法內(nèi)部對(duì)異常進(jìn)行捕獲,最后拋出。調(diào)用處的catch可以捕獲到異常。
總結(jié)
到此這篇關(guān)于JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析的文章就介紹到這了,更多相關(guān)JAVA拋出異常代碼是否執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
activemq整合springboot使用方法(個(gè)人微信小程序用)
這篇文章主要介紹了activemq整合springboot使用(個(gè)人微信小程序用),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
SpringBoot QQ郵箱發(fā)送郵件實(shí)例代碼
大家好,本篇文章主要講的是SpringBoot QQ郵箱發(fā)送郵件實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
Java實(shí)現(xiàn)獲取銀行卡所屬銀行,驗(yàn)證銀行卡號(hào)是否正確的方法詳解
這篇文章主要介紹了Java實(shí)現(xiàn)獲取銀行卡所屬銀行,驗(yàn)證銀行卡號(hào)是否正確的方法,結(jié)合實(shí)例形式詳細(xì)分析了java判斷銀行卡歸屬地及有效性的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-09-09
mybatis的insert插入后獲取自增id的方法詳解(從controller到mapper)
這篇文章主要介紹了mybatis的insert插入后獲取自增id的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-10-10
mybatis plus自動(dòng)生成代碼tinyint(1)自動(dòng)轉(zhuǎn)換為Boolean的問(wèn)題及解決
這篇文章主要介紹了mybatis plus自動(dòng)生成代碼tinyint(1)自動(dòng)轉(zhuǎn)換為Boolean的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)
Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中常用的幾種接口和類,感興趣的小伙伴可以跟隨小編一起了解一下2023-05-05

