try,catch,finally中带有return的情况

1,finally中不带有return
1.1
当类型为基本类型时,当try中带有return时,会先执行return前面的代码,然后将需要返回的信息暂时保存,然后执行finally中的代码,最后在返回之前保存的信息。
1.2
当类型为引用类型时,如集合,集合里存放的是变量的地址,而不是变量本身,当finally通过地址改变了变量,会影响return的值,
(个人拙见,string里直接赋值是存在字符串池中,不是地址,因此string也不会改变。stringbuffer也不会改变)
2,finally中带有return
try中的return会失效,finally中的return会覆盖try的return,但是不建议这么写,因为,会破坏程序的完整性,一旦finally报异常会覆盖catch中的异常

public class Test1 {
//当finally中没有return时,会正常返回try中的return,
public String name() {
String x=“123”;
try {
//System.out.println(x);
return x;

	}
	finally {
		 x="123456";
		 //System.out.println(x);
		 //return x;
	}
	
}

private List<Integer> testReturn2() {
    List<Integer> list = new ArrayList<>();
    try {
        list.add(1);
        System.out.println("try:" + list);
        return list;
    } catch (Exception e) {
        list.add(2);
        System.out.println("catch:" + list);
    } finally {
        list.add(3);
        System.out.println("finally:" + list);
    }
    return list;
}

public  StringBuffer name1() {
	StringBuffer a =new StringBuffer("123");
	try {
		
		return a;
	}
	finally {
		a=new StringBuffer("222222");
		
	}
}

public static void main(String[] args) {
	System.out.println(new Test1().name());
	System.out.println(new Test1().name1());
	System.out.println(new Test1().testReturn2());
}

}

打印:

123
123
try:[1]
finally:[1, 3]
[1, 3]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值