0
点赞
收藏
分享

微信扫一扫

在finally代码块里面return带来的问题


项目场景:

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语句


举报

相关推荐

0 条评论