Java 在 try catch finally 中的任何一个语句块中添加 return 之后 finally语句块代码会正常执行吗

try catch finally

通常这个语句块的执行是为了处理受检异常,所谓的受检异常就是编译器检测到的并且开发人员必须处理的异常,常见的受检异常有:

Java.lang.ClassNotFoundException

Java.lang.CloneNotSupportedException

Java.lang.IllegalAccessException

Java.lang.InterruptedException

Java.lang.NoSuchFieldException

Java.lang.NoSuchMetodException

在 try 语句块或者 catch 语句块中执行了return之后,finally 语句块还是会正常执行吗?

finally 语句块是会继续执行的;

在 try 语句块中写 return 语句是没有必要的,因为是为了捕捉异常才写的 try 语句块,这样做没有必要;

    @Test
    public void testTry() {
        try {
            return;
        }catch (Exception e) {
            return;
        } finally {
            System.out.println("finally will be executed!");
        }
    }

finally 语句块中的代码是可以正常执行的

在 finally 语句块中执行 return 之后程序还会继续执行吗?

return 在 finally 语句块最前面

在 finally 语句块的执行之前直接 return 后面的语句是不会编译通过的,编译器直接报错,不是异常,是错误的做法;

    @Test
    public void testTry() {
        try {
            return;
        }catch (Exception e) {
            return;
        } finally {
            return;
            System.out.println("finally will be executed!");// 这句话会爆红,不允许这样写!
        }
    }

return 在 finally 语句块中间

同样的把 ruturn 放置到了 finally 语句块中的中间, return 下面的代码也是会爆红的,不允许这样写;

    @Test
    public void testTry() {
        try {
            return;
        }catch (Exception e) {
            return;
        } finally {
            System.out.println("cd");
            return;
            System.out.println("cd");// 代码爆红,错误的书写
        }
    }

return 在 finally 语句块最后面

在 finally 语句块的最后执行 return 是允许的,因为 finally 里面的代码已经正常执行结束了,return 对于 finally 语句块中的执行结果没有影响;

    @Test
    public void testTry() {
        try {
            return;
        }catch (Exception e) {
            return;
        } finally {
            System.out.println("cd");
            return;
        }
    }

什么时候 finally 不会执行?

引用英文的解释:

There are few situations where the finally will not be executed like JVM crash, power failure, software crash and etc. Other than these conditions, the finally block will be always executed

1、虚拟机崩了
2、软件崩了
3、线程被强制结束了

其他的条件下,finally 里面的代码都是会正常执行的;

小结

在 finally 语句块中的代码,不会因为加不加 return 就会停止运行,只有遇到了异常里面的 Error ,finally 才会停止执行,因为程序运行的环境都奔溃了,finally 代码自然是不会执行下去的;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值