try finally return

本文详细解析了Java中try-finally语句块内return语句的行为特征,包括其执行顺序及如何影响返回值。同时探讨了线程安全问题,并通过具体代码示例进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    class Entry
    {

        public Entry(String value){
            this.value = value;
            System.out.println("[Entry]setValue:"+value);
        }
        private String value = "";
        public String getValue()
        {
            System.out.println("[Entry]getValue"+value);
            return value;
        }
        public Entry setValue(String value)
        {
            this.value = value;
            System.out.println("[Entry]setValue:"+value);
            return this;
        }
    }  
    private static Entry testTryFinally()
    {
        Entry e = new Entry("0");
        try{
            return e.setValue("2");
        }finally{
            e.setValue("1");
        }
        
    }    
    public static void main(String[] args) throws IOException
    {

        testTryFinally();
    }


输出结果:

[Entry]setValue:0
[Entry]setValue:2
[Entry]setValue:1

 

结论:

先执行Entry e = new Entry("0");

再执行e.setValue("2");然后把这一步的值赋给return,这个时候进入finally

再执行e.setValue("1");

在执行finally之前e.setValue("2");就已经执行了,然后把结果暂存在return里面.

执行完finally后才返回return.

 

r.lock();
try{
      return Entry.setValue("X");
}finally{
      r.unlock();
}

 这段代码是线程安全的,因为先执行了Entry.setValue("X");才解锁的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值