1 Java异常捕获
1.1 方法被调用者try…catch里面是否抛出异常
方法调用者main
不处理异常,既不捕获,也不抛出
讨论点:方法被调用者testB
是否抛出异常
1.1.1 如果不抛出异常
那么不会阻断方法testB
的运行,会继续执行catch后面的代码,并且整个方法调用栈不会终止
public static void main(String[] args) {
log.info("*******main 开始运行******");
testB();
log.info("*******main 开始结束******");
}
private static void testB() {
log.info("*******testB 开始运行******");
try {
log.info("testB方法执行中");
System.out.println(1/0);
} catch (Exception e) {
log.info("*******testB捕获运行时异常******");
//throw new RuntimeException(e);
}
log.info("testB继续向下执行了");
log.info("*******testB 运行结束******");
}
1.1.2 如果抛出异常
那么会阻断方法testB
的运行,catch后面的代码不会继续执行,并且整个方法调用栈会从方法testB
终止
public static void main(String[] args) {
log.info("*******main 开始运行******");
testB();
log.info("*******main 开始结束******");
}
private static void testB() {
log.info("*******testB 开始运行******");
try {
log.info("testB方法执行中");
System.out.println(1/0);
} catch (Exception e) {
log.info("*******testB捕获运行时异常******");
throw new RuntimeException(e);
}
log.info("testB继续向下执行了");
log.info("*******testB 运行结束******");
}
1.2 方法调用者捕获异常
讨论点:调用者testA
是否抛出异常
1.2.1 如果抛出异常
那么不会阻断方法testA
的运行,会继续执行catch后面的代码,并且整个方法调用栈不会终止
public static void main(String[] args) {
log.info("*******main 开始运行******");
testA();
log.info("*******main 运行结束******");
}
private static void testA() {
log.info("*******testA 开始运行******");
try {
testB();
} catch (Exception e) {
log.info("*******testA 捕获运行时异常******");
//throw new RuntimeException(e);
}
log.info("testA 继续执行了");
log.info("*******testA 运行结束******");
}
private static void testB() {
log.info("*******testB 开始运行******");
try {
log.info("testB方法中");
System.out.println(1/0);
} catch (Exception e) {
log.info("*******testB 捕获运行时异常******");
throw new RuntimeException(e);
}
log.info("testB 继续执行了");
log.info("*******testB 运行结束******");
}
1.2.2 如果抛出异常
那么会阻断方法testA
的运行,catch后面的代码不会继续执行,并且整个方法调用栈会从方法testA
终止
public static void main(String[] args) {
log.info("*******main 开始运行******");
testA();
log.info("*******main 运行结束******");
}
private static void testA() {
log.info("*******testA 开始运行******");
try {
testB();
} catch (Exception e) {
log.info("*******testA 捕获运行时异常******");
throw new RuntimeException(e);
}
log.info("testA 继续执行了");
log.info("*******testA 运行结束******");
}
private static void testB() {
log.info("*******testB 开始运行******");
try {
log.info("testB方法中");
System.out.println(1/0);
} catch (Exception e) {
log.info("*******testB 捕获运行时异常******");
throw new RuntimeException(e);
}
log.info("testB 继续执行了");
log.info("*******testB 运行结束******");
}