java——finally里面的代码一定会执行吗?

问题:finally中的代码一定会执行吗?

答案:不会。

情况分类:

1不抛出异常:try里面的代码、finally里面的代码、finally以后的代码都将正常执行,而catch里面的代码不会执行。

2抛出异常且被catch捕获:try里面的代码部分执行,catch里面的代码、finally里面的代码、finally以后的代码都将正常执行。

3抛出异常,但未被catch捕获:抛出异常的语句将会报错,在try中的抛出异常的语句后的语句将不会执行,由于异常未被捕获,故catch语句不执行,但是finally仍然会执行,在finally后面的语句由于程序已经报错停止,故将不会执行。

不会执行finally中的代码的具体情况:

第一种情况:程序未执行到 finally 块。

1.在执行 try 块之前直接 return,finally 块是不会执行的。

2.在执行 try 块之前程序直接报错,那么finally块自然就不会执行到了。

3.在执行try块时,调用System.exit(0)主动退出jvm。

第二种情况:程序执行到 finally 块。

1.finally 块不含返回值。简单总结:若finally中无return,以try中的return为准。

//结果返回0。这是因为Java程序会把try或者catch块中的返回值保留,
//也就是暂时的确认了返回值,然后再去执行finally代码块中的语句。等到finally代码块执行
//完毕后,如果finally块中没有返回值的话,就把之前保留的返回值返回出去。
public class TryCatchTest {
    private static int total() {
        int i = 0;
        try {
            System.out.println("执行try:" + i);
            return i;
        } finally {
            ++i;
            System.out.println("执行finally:" + i);
        }
    }
    public static void main(String[] args) {
        System.out.println(">>>>>>>>>输入结果:" + total());
    }
}

2.finally 块含返回值。简单总结:finally块的方法有返回值时,要对于return出现的地方进行具体分析。在finally块中进行return操作的话,则方法整体的返回值就是finally块中的return返回值。如果在finally块之后的方法内return,则return的值就是进行完上面的操作后的return值


public class TryCatchTest {
    private static int total() {
        int i = 0;
        try {
            System.out.println("执行try:" + i);
            return i;
        } finally {
            ++i;
            System.out.println("执行finally:" + i);
            return i;
        }
    }
    public static void main(String[] args) {
        System.out.println(">>>>>>>>>输入结果:" + total());
    }
}

public class TryCatchTest {
    private static int total() {
        int i = 0;
        try {
            System.out.println("执行try:" + i);
            return i;
        } finally {
            ++i;
            System.out.println("执行finally:" + i);
        }
        return i;
    }
    public static void main(String[] args) {
        System.out.println(">>>>>>>>>输入结果:" + total());
    }
}

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值