return在try-catch-finally不同位置,返回值影响
return语句不在finally中
在catch或try中有renturn语句,则return语句在finally语句执行结束之后才执行,但finally并不能改变返回值,如:
public static Integer test1() {
int ret = 1;
try {
return ret;
} finally {
ret = 2;
}
}
返回值为:1,而不是2。
注意: 在try中return,在finally执行前会把结果保存起来,即使在finally中有修改也以try中保存的值为准,但如果是引用类型,修改的属性会以finally修改后的为准;
finally中有return语句
如果finally中有return语句,则try和catch中的return会丢失,实际会返回finally中的返回值;并且finally中的return还会掩盖try和catch中的异常,像没发生异常一样。eg:
public static Integer test1() {
int ret = 1;
try {
int a = 100 / 0;
return ret;
}finally {
return 2;
}
}
返回值为2,并没有抛出异常。
finally中有异常抛出
如果finally中有异常抛出,则会覆盖原异常。eg:
public static void test1() {
try {
int a = 100 / 0;
} finally {
throw new NumberFormatException();
}
}
结果:Exception in thread “main” java.lang.NumberFormatException