package basic;
public class FinallyTest {
public static void main(String[] args) {
System.out.println(returnNotInFinally());
System.out.println("*************************************************");
System.out.println(exceptionInTry());
System.out.println("*************************************************");
System.out.println(returnChanggedInFinally());
System.out.println("*************************************************");
System.out.println(returnInFinally());
}
private static int returnNotInFinally() {
int res = 10;
try {
System.out.println("try.......");
return res;
} catch (Exception e) {
System.out.println("catch.......");
} finally {
System.out.println("finally.......");
}
return res+=90;
}
private static int exceptionInTry() {
int res = 10;
try {
System.out.println("try.......");
int i = 1/0;
return res;
} catch (Exception e) {
System.out.println("catch.......");
} finally {
System.out.println("finally.......");
}
return res+=90;
}
private static int returnChanggedInFinally() {
int res = 10;
try {
System.out.println("try.......");
return res;
} catch (Exception e) {
System.out.println("catch.......");
} finally {
System.out.println("finally.......");
res+= 90;
}
return res;
}
private static int returnInFinally() {
int res = 10;
try {
System.out.println("try.......");
return res += 30;
} catch (Exception e) {
System.out.println("catch.......");
} finally {
System.out.println("finally.......");
return 200;
}
}
}
1 return语句执行 → finally语句 → return语句结果返回
2 finally块中的return语句会覆盖try块中的return返回
3 如果finally语句中没有return语句覆盖返回值,那么原来的返回值没有因为finally里的修改而改变
4 try块里的return语句在异常的情况下不会被执行,这样具体返回哪个看情况
5 当try发生异常后,会执行外层的return语句。。catch和finally里面放return后,外面不能放return,显示unreachable statement;