对于异常我们可以使用try…catch进行捕获,但是对于捕获的异常在catch中进行throw new ..Exception进行抛出给调用层,
捕捉异常是捕捉给开发人员,方便与调试bug,而最终我们返回给用户的Controller层要对可能出现的异常进行处理并且返回信息给用户;
作用:
1、捕获可能出现的异常,抛出定义的异常触发事务进行回滚
2、调用层检测到异常后,对异常加以处理成提示信息返回给用户,提升体验
3、捕捉可能出现的异常方便开发进行调试,以及对异常进行处理
例如:
一、不进行捕获异常
for (int i=1;i<=5;i++){
if(i == 3){
System.out.println(1/0);
}
System.out.println(i);
}
结果:
程序因为异常一直向上抛出至JVM直至终止,for循环并没有继续执行
二、for循环捕获异常(try...catch包裹在最外层)
try {
for (int i=1;i<=5;i++){
if(i == 3){
System.out.println(1/0);
}
System.out.println(i);
}
} catch (Exception e) {
e.printStackTrace();
}
结果:
将try定义在for循环的外层,这个时候,程序因为异常终止,而且for循环并没有继续执行
三、将异常定义在for循环内层,不进行抛出
for (int i=1;i<=5;i++){
if(i == 3){
try {
System.out.println(1/0);
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(i);
}
结果:
异常在for循环内被捕获并且未被抛出,故没有导致程序终止,继续执行完成了for循环
四、将异常定义在for循环的内层,并且手动抛出新的异常
public class TestException {
public static void main(String[] args) {
try {
test();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test() throws Exception{
for (int i=1;i<=5;i++){
if(i == 3){
try {
System.out.println(1/0);
} catch (ArithmeticException e) {
e.printStackTrace();
throw new Exception("自定义异常");
}
}
System.out.println(i);
}
}
}
结果:
向上抛出了异常直到最上层,导致程序终止
综上初步得出结论: