Exception 能被程序本身处理( try catch ), Error 是⽆法处理的(只能尽量避免) ,是 JVM 虚拟机的问题
1.4.1 try catch finally 的返回问题
1、不管有没有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行,在return 之前执行,但是 finally 中对于值的修改并不会影响上述 retrun 的值
3、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
public class Demo01 {
public static class testDemo {
/*第一种情况*/
public int test01() {
int i = 0;
try {
i++; ------》1
return i; ------》2
} finally {
i++; ------》3
System.out.printl("finally:i=" + i); -----》4
}
}
/*
1--》3---》4---》2 但是 finally 中的代码不会影响 return 里面的变量,因为return 已经在上一步写死了
finally:i=2
return: i=1
*/
/*第二种情况*/
public int test02() {
int i = 0;
try {
i += 1;
i = 3 / 0;
return i;
} catch (Exception e) {
i += 2;
return i;
} finally {
i += 5;
System.out.println("finally:i=" + i);
}
}
/*
finally:i=8
return: i=3
*/
/*第三种情况*/
public int test03() {
int i = 0;
try {
i += 1;
return i;
} catch (Exception e) {
i += 2;
return i;
} finally {
i += 5;
System.out.println("finally:i=" + i);
return i;
}
}
/*
finally:i=6
return: i=6
*/
/*第四种情况*/
public int test04() {
int i = 0;
try {
i += 1;
return i;
} catch (Exception e) {
i += 2;
} finally {
i += 5;
System.out.println("finally:i=" + i);
}
return i += 100;
}
}
/*
finally:i=6
return: i=1
*/
}