捕获异常后的代码执行情况分两种:会执行,不会执行
一.会执行的情况:
1.没有向上抛出异常
例如:
public class TestTryCatch {
public static void main(String args[]) {
String str = null;
testTrycatch(str);
System.out.println(str);
}
private static String testTrycatch(String str) {
try {
if (str.equals("test")) {
}
} catch (NullPointerException e) {
System.out.println("空指针异常");
}
try {
str = "change";
System.out.println(str);
String a= null;
if(a.endsWith(str))
System.out.println(a);
} catch (NullPointerException e) {
System.out.println("第二个空指针异常");
}
return str;
}
}
执行结果:
空指针异常
change
第二个空指针异常
null
2.向上抛出了异常,但是被当前catch所捕获
例:
public class TestTryCatch {
public static void main(String args[]) {
String str = null;
testTrycatch(str);
System.out.println(str);
}
private static String testTrycatch(String str) {
try {
if (str.equals("test")) {
}
} catch (NullPointerException e) {
try {
throw new Exception("第一个空指针异常");
} catch (Exception e1) {
e1.printStackTrace();
}
}
try {
str = "change";
System.out.println(str);
String a= null;
if(a.endsWith(str))
System.out.println(a);
} catch (NullPointerException e) {
System.out.println("第二个空指针异常");
}
return str;
}
}
执行结果:
java.lang.Exception: 第一个空指针异常
change
第二个空指针异常
null
at TestTryCatch.testTrycatch(TestTryCatch.java:16)
at TestTryCatch.main(TestTryCatch.java:5)
二.不会执行的情况:向上抛出了异常,并且没有被当前catch捕获异常,因为被上级捕获异常后,无法再进入本方法执行捕获异常后的代码
例如:
public class TestTryCatch {
public static void main(String args[]) throws Exception {
String str = null;
testTrycatch(str);
System.out.println(str);
}
private static String testTrycatch(String str) throws Exception {
try {
if (str.equals("test")) {
}
} catch (NullPointerException e) {
throw new Exception("空指针异常");
}
try {
str = "change";
System.out.println(str);
String a= null;
if(a.endsWith(str))
System.out.println(a);
} catch (NullPointerException e) {
System.out.println("第二个空指针异常");
}
return str;
}
}
执行结果:Exception in thread "main" java.lang.Exception: 空指针异常
at TestTryCatch.testTrycatch(TestTryCatch.java:15)
at TestTryCatch.main(TestTryCatch.java:5)
本文只代表个人观点,如有错误,欢迎指正