项目场景:
package demo;
/**
* //todo
*
* @author dingwen
* 2021.06.09 14:10
*/
public class Test {
public static void main(String[] args) {
System.out.println("test1() = " + test1());
}
private static int test1() {
int a = 0;
try {
a = 1;
// int c = 1/0;
return a;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
a = 2;
return a;
}
}
}
问题描述:
只要在finally
代码块里面有return
就会覆盖try
或者catch
里面的retun。
总结:
- 首先要明确的是,无论你之前的try块还是catch块中是否含有return 语句,finally块都会执行
- 其次如果finally 块中也有return语句的话,那么之前的try 块和catch 块中的return语句会被覆盖掉
- 如果finally块中包含了return语句,即使前面的catch块重新抛出了异常,则调用该方法的语句也不会获得catch块重新抛出的异常,而是会得到finally块的返回值,并且不会捕获异常
- 应当避免在finally块中包含return语句