JAVA异常处理一return

我们知道finally块的代码在进入异常处理体系后,里面的代码一定会被执行(除非调用System.exit(0)强制退出程序),那么如果try{}里面有一个return语句,那么紧随其后的finally{}代码会被执行不?reutrn 需要注意些什么呢。

先看例子

package exceptionTest;

public class 覆盖return {
	
	//测试return 基本类型
	public static int finallytest() {
		int r=1;
		try {
			r=3;
			return r;
		} catch (Exception e) {
			return 0;
			// TODO: handle exception
		}finally{
			r=5;
			System.out.println("直接变量");
		}
	}
	//测试return 引用类型
	  public static StringBuffer ftest(){
		  StringBuffer sb=new StringBuffer("Hello");
		  try {
			sb.append("gsg");
			return sb;
		} catch (Exception e) {
			return null;
			// TODO: handle exception
		}finally{
			sb.append(" world");
			System.out.println("引用变量");
		}
	  }
	
	public static void main(String[] args) {
		int zj =finallytest();
		System.out.println(zj);
		System.out.println(ftest());
	}
}

输出为:

直接变量
3
引用变量
Hellogsg world

由此可得:

   1.return的是常量   

finally块会改变return的值 
   2.return 的是变量

     若是基本类型的数据,在finally块改变return的变量的值 没有任何影响

     而引用类型会有改变,因为方法内部定义的变量存储在栈中,当这个函数结束后,

     对应的栈会被回收,其变量自然不复存在了,所有return的值不是返回变量的值,而是复制一份再返回。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值