catch,finally执行遇到return语句怎么办


try 
{ 
       //可能出异常
catch 
{ 
       //try异常则执行,否则这里的代码不会执行 
} 
finally 
{ 
     //不管有没有异常,finally都会执行
} 
比如

public class Test {
	public static void main(String[] args) {
		
		//try语句,出错了首先执行catch语句,在执行finally语句,即使有return,finally语句块也会执行
		  try{

                        int c=Integer.parseInt("1gjrio");
			//这语句不会执行
			System.out.println(c);
			}catch(Exception e)
			{
				System.out.println("catch------转换错误!!!");
				
			}
			finally
			{
				
				System.out.println("finally------执行");
			}
	}
} 

但是有人遇到过面试题 如果 try里面有return 语句,finally会执行吗?catch里面有return 语句会执行吗?

答案是肯定的,

请看一下代码

package exceptionfinally;

public class Test {
	public static void main(String[] args) {
		System.out.println(getNum());
		
	}
	
	public static int getNum(){
		int i=1;
		try{
                        int c=Integer.parseInt("1gjrio");
			return i;
		}
		catch(Exception e){
			System.out.println("catch");
			i=3;
			return i;
		}finally{
			i=2;
		//	return i;
		}
		
	}

}

得到的结果是多少呢?答案是:3

如果把这个return 的注释去掉 答案是多少呢? 答案是:2

原理是什么呢?看了资料还是很简单的

return语句的执行是: 将结果集压入调用此函数的栈帧的operate stack,  然后将此方法栈帧从jvm stack 弹出来,方法调用完毕,finally就在结果压栈与方法栈帧弹出的中间执行。如果finally里面有return语句,则jvm虚拟机再这样执行一次,然后就出现了上面的结果。




以上问题,小弟学习java也是有点兴趣,喜欢研究,看了网上的一些资料,和自己实验写出的。如果有什么不对的,欢迎指正,谢谢。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值