try catch finally 的 ruturn 问题

直接上例子吧

public class test {
    public static String fun() {
        String result = "hello";
        try {
            result = "1";
            System.out.println("try");
            return result;
        } catch (Exception e) {
            result = "2";
            System.out.println("catch");
            return result;
        } finally {d
            result = "3";
            System.out.println("finally");
            //return result;
        }
    }

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

结果为
try
finally
1

  • finally执行了,但是修改result没有生效,原因:执行try后,暂存其return值,但不影响String类型
  • 将finally中的return打开,返回修改后的值3
  • 将result修改成基本数据类型结果一致
public class test {
    static class Person{
        private String name;
        private int age;
        public Person() {
            name = "lucy";
            age = 20;
        }
    }
    public static Person fun() {
        Person p = new Person();
        try {
            p.name = "jack";
            p.age = 21;
            System.out.println("try");
            return p;
        } catch (Exception e) {
            p.name = "mike";
            p.age = 22;
            System.out.println("catch");
            return p;
        } finally {
            p.name = "Lily";
            p.age = 23;
            System.out.println("finally");
            //return p;
        }

    }

    public static void main(String[] args) {
        System.out.println(fun().name);
        System.out.println(fun().age);
    }
}

如果改为引用数据类型,try中return暂存的是指向堆中对象的引用地址(JVM栈中的),如果返回值是对象,则finally中的语句,仍会根据地址的副本,改变原对象的值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值