try和finally同时有return的时候最终返回值应该是哪个

最近发现某些网友在刷题,然后有这么一个题,在java中当try和finally同时有return时,返回值应该是哪个?一看就是闲的蛋疼,正常人谁会这么写呢?不过还是打算从字节码层面做一个解释吧。代码如下:

public String testReturn(){
	try {
		retrun "try";
	}catch (Exception e){
		e.printStackTrace();
	}finally{
		return "finally";
	}
}

这是实际测试时用的代码:
在这里插入图片描述
从执行结果中可以看到,返回的是finally。当然,这只是其中一种情况,其余的我也懒得验证了,列举出来诸君自行验证:
1.当返回的是同一个变量时,又或者该变量在某个位置进行了变更。

public String testReturn(){
	String string = "hello";
	try {
		retrun string;
	}catch (Exception e){
		e.printStackTrace();
	}finally{
		return string;
	}
}

2.当返回前抛出了异常

public String testReturn(){
	try {
		//抛出了异常时
		retrun "try";
	}catch (Exception e){
		e.printStackTrace();
	}finally{
		return "finally";
	}
}

不过我觉得这俩好像就更没意思了。接下来我们看看字节码的情况:
在这里插入图片描述
从代码中我们看到:
第0行:将常量池中#42的字符串try给放入操作数栈中;
第3行:在将常量池中#44的字符串finally放入操作数栈中;
通过栈先进后出的原理,那么会先返回finally,另外,方法只会有一个返回值,所以是finally。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值