当finally遇上return,finally还会执行吗?

  1. 在 try-catch-finally 语句中,finally一定会被执行吗?

    1. 在 try 没有被执行到时,finally语句不会执行
    2. 在 try 中有 System.exit(0),时finally不会执行。因为 System.exit(0) 终止了 java 虚拟机JVM 。
  2. 若在try中出现return语句,finally语句什么时候执行?

public class practice {
    public static void main(String[] args) {
        System.out.println(test());
    }

    public static int test(){
        int a=10;
        try{
            System.out.println("try-----");
            return a = a+50;
        }
        catch(Exception e){
            System.out.println("catch---");
        }
        finally{
            System.out.println("finally---");
            if(a>50){
                System.out.println("a > 50,a = "+a);
            }
        }
        return a;
    }
}

输出结果:

try-----
finally---
a > 50,a = 60
60

finally语句在return语句执行之后,return语句返回之前执行
return语句已经执行了再执行finally语句,不过没有直接返回,而是等finally语句执行完才返回

  1. 若在finally中也出现return结果又当怎样?
public class practice {
    public static void main(String[] args) {
        System.out.println(test());
    }

    public static int test(){
        int a=10;
        try{
            System.out.println("try-----");
            return a = a+50;
        }
        catch(Exception e){
            System.out.println("catch---");
        }
        finally{
            System.out.println("finally---");
            if(a>50){
                System.out.println("a > 50,a = "+a);
            }
            return a+100;
        }
    }
}

输出结果:

try-----
finally---
a > 50,a = 60
160

finally 中的 return 语句会覆盖 try 中的 return 语句

  1. 如果 finally 中没有 return 语句,但是改变了变量 a 的值,结果又会怎样?
public class practice {
    public static void main(String[] args) {
        System.out.println(test());
    }

    public static int test(){
        int a=10;
        try{
            System.out.println("try-----");
            return a = a+50;
        }
        catch(Exception e){
            System.out.println("catch---");
        }
        finally{
            System.out.println("finally---");
            if(a>50){
                System.out.println("a > 50,a = "+a);
            }
            a = 200;
        }
        return 300;
    }
}

输出结果:

try-----
finally---
a > 50,a = 60
60

由于 finally 中没有 return 语句覆盖,原来返回值不变

5. 若发生异常导致 try 中的 return 没有执行,而是执行了catch 语句
此时 catch 和 finally 对变量 a 的修改就会影响返回值

6. 如果 catch 中有 return 又当如何执行?

public class practice {
    public static void main(String[] args) {
        System.out.println(test());
    }

    public static int test(){
        int a=10;
        try{
            System.out.println("try-----");
            a = a/0;
            return a = a+50;
        }
        catch(Exception e){
            System.out.println("catch---");
            return a = a+500;
        }
        finally{
            System.out.println("finally---");
            if(a>50){
                System.out.println("a > 50,a = "+a);
            }
            a = 200;
        }
    }
}

输出结果:

try-----
catch---
finally---
a > 50,a = 510
510

0当发生异常后,catch 中的 return 执行情况与未发生异常时 try 中执行情况相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值