JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析
一、出現(xiàn)異常時,try-catch對代碼執(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沒有l(wèi)ength()方法,報空指針異常錯誤
//下面兩條賦值語句不會執(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沒有l(wèi)ength()方法,報空指針異常錯誤
//下面兩條賦值語句不會執(zhí)行
c = 1;
d = 2;
} catch (Exception e) {
System.out.println("c的值為:" + c);
}
System.out.println("d的值為:" + d); //本條語句會執(zhí)行
}結(jié)果如下:

結(jié)論:
1、加上try-catch,出現(xiàn)異常時,try中出現(xiàn)異常的那一行代碼的后續(xù)代碼不再執(zhí)行
2、catch中的代碼正常執(zhí)行,并且catch之后的代碼也會執(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的值不能是空");
}
//下面兩條賦值語句不會執(zhí)行
c = 1;
d = 2;
} catch (Exception e) {
System.out.println("c的值為:" + c); //會執(zhí)行
}
System.out.println("d的值為:" + d); //會執(zhí)行
}結(jié)果如下:

結(jié)論:
1、加上try-catch,并在try中拋出現(xiàn)異常,try中拋出異常的那一行代碼的后續(xù)代碼不再執(zhí)行
2、catch中的代碼正常執(zhí)行,并且catch之后的代碼也會執(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沒有l(wèi)ength()方法,報空指針異常錯誤
//下面兩條賦值語句不會執(zhí)行
c = 1;
d = 2;
} catch (Exception e) {
System.out.println("c的值為:" + c);
throw new RuntimeException(e);
}
System.out.println("d的值為:" + d); //本條語句也不執(zhí)行
}結(jié)果如下:

結(jié)論:
1、加上try-catch,并在catch中拋出現(xiàn)異常,try中出現(xiàn)異常的那一行代碼的后續(xù)代碼不再執(zhí)行。
2、catch中的代碼只執(zhí)行throw之前的代碼
二、循環(huán)時出現(xiàn)異常后續(xù)代碼是否執(zhí)行
我們需要明確的一點是,當出現(xiàn)異常時,Java中的for循環(huán)默認會停止執(zhí)行,不會進行下一次循環(huán)。
2.1、循環(huán)中不加try-catch
//不加try-catch,當循環(huán)中出現(xiàn)異常時,循環(huán)會終止,不會繼續(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,當循環(huán)中出現(xiàn)異常時,循環(huán)會終止,不會繼續(xù)下一次循環(huán)
2.2、循環(huán)中加try-catch
//加try-catch,當循環(huán)中出現(xiàn)異常時,循環(huán)會終止,不會繼續(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,當循環(huán)中出現(xiàn)異常時,循環(huán)會終止,不會繼續(xù)下一次循環(huán)
2.3、加try-catch,并在catch中將異常拋出
//加try-catch,并在catch中將異常拋出
//當循環(huán)中出現(xiàn)異常時,循環(huán)會終止,不會繼續(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中將異常拋出,當循環(huán)中出現(xiàn)異常時,循環(huán)會終止,不會繼續(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("我要當高級JAVA開發(fā)工程師");
int i = 1 / 0;
}結(jié)果如下:

結(jié)論:
方法內(nèi)部不對異常做任何處理,調(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("我要當高級JAVA開發(fā)工程師");
int i = 1 / 0;
} catch (Exception e) {
System.out.println("方法內(nèi)部出現(xiàn)了異常" + e);
}
}結(jié)果如下:

結(jié)論:
方法內(nèi)部對異常進行捕獲,調(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("我要當高級JAVA開發(fā)工程師");
int i = 1 / 0;
} catch (Exception e) {
System.out.println("方法內(nèi)部出現(xiàn)了異常" + e);
throw e;
}
}結(jié)果如下:

結(jié)論:
方法內(nèi)部對異常進行捕獲,最后拋出。調(diào)用處的catch可以捕獲到異常。
總結(jié)
到此這篇關(guān)于JAVA中出現(xiàn)異常、拋出異常后續(xù)代碼是否執(zhí)行情況詳析的文章就介紹到這了,更多相關(guān)JAVA拋出異常代碼是否執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解PipedInputStream和PipedOutputStream_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了管道PipedInputStream和PipedOutputStream,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
@MapperScan和@ComponentScan一塊使用導致沖突的解決
這篇文章主要介紹了@MapperScan和@ComponentScan一塊使用導致沖突的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Java中使用輾轉(zhuǎn)相除法求最大公約數(shù)
這篇文章主要介紹了Java中使用輾轉(zhuǎn)相除法求最大公約數(shù),本文直接給出代碼實例,需要的朋友可以參考下2015-05-05
Spring注解驅(qū)動之BeanDefinitionRegistryPostProcessor原理解析
這篇文章主要介紹了Spring注解驅(qū)動之BeanDefinitionRegistryPostProcessor原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

