有关finally代码块内容是否会被执行的测试

这都是看了大佬的想法后自己敲了一下

一、首先我们需要确定一点,基本上不会有完美的代码,所以,finally是不可能绝对被执行的,我们的测试只是在try catch中

    1、第一点,如果我们的代码在 try 之前就已经出错,不管什么错误,那么都不会进入 try catch中,自然也就不会被catch到,那么也就不会有运行finally的这一说法了

        a、这是数组越界

        

        b、这是除零

        

        

    2、那么我们就得想了,如果已经被 try 捕捉到了,那么肯定会执行了吧,我们拭目以待

        

        

        我们发现也没有运行,因为System.exit(0)是直接退出虚拟机,java运行环境都退出去了,怎么可能继续运行了,这个时候我们肯定就想了,哪个傻子没事干这么做,还真有,比如我,这些都不重要,那么和这种情况差不多的事情就是突然关机,卡死等等······,就不列举了

二、到这我们就得想了啊,那如果我们都运行了是不是就不会有什么意外了呢,那你就错了,你需要明白try catch的运行顺序

    

    我们发现正常打印了,我们可以在上面的情况下打印数据

    

    你会发现,我们的程序先打印了try 然后是finally ,最后才是主方法中的程序,当你用来做一些小的计算的时候,我们可以明确的发现,finally会直接将数据计算并且返回,覆盖之前的数据

    

    当我们在try中加入一个小的增加操作的时候,我们就不难发现,finally是在try运行完成之后将try中的数据基础上进行运算,并不是直接调用最外层的数据

    

    那么我们还可以继续做一个实验,将return放回去,然后不在finally中进行return,我们会发现,返回的数据并不是3,这是因为finally是将try中数据冻结之后继续进行运算,并不会改变try中的 i 的值,当finally运行完成之后就会将数据还原

    

    这里还有一种情况就是在try 中继续调用方法,我们会发现sum()这个方法竟然运行到了finally之前,这是因为return sum();这个等同于

        int sum = sum();

        return sum;

    所以就先到这吧,java好难

    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值