前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >try,finally中都有return时程序的执行顺序

try,finally中都有return时程序的执行顺序

作者头像
用户2141593
发布2019-02-20 10:52:53
2.6K0
发布2019-02-20 10:52:53
举报
文章被收录于专栏:Java进阶Java进阶

 在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家各有各的说法,刚好今天有个朋友问了我这个问题,下面我就提供两段代码,详细解释一下~

这是第一种情况:try代码块中包含return语句,finally代码块中不包含return语句;

java代码如下:

代码语言:javascript
复制
package Exception;

public class Test02 {
	public static void main(String[] args) {
			System.out.println(test());
	}
	public static int test(){
			try{
				int i=1;
				return i;
			}
			finally{
				int i=2;
				System.out.println(i);
			}
	}
}

这里我们在try代码块中定义了 i=1; 并设定了return的返回值为i;

在finally代码块中为设置返回值,但同样的输出了i;

结果为

Java代码:

代码语言:javascript
复制
2
1

结果显示:finally代码块里如果没有return,finally代码块会优先在try代码块里的return前执行;

第二种情况是:try代码块和finally代码块中都有return语句

这也是我们需要重点讨论的地方;

java代码如下:

代码语言:javascript
复制
package Exception;

public class Test01 {

	public static void main(String[] args) {
		
		System.out.println(test());
	}
	
public  static int  test(){
		try{
			int i = 1;
			return i;
		   }
		finally{
			int j = 2;
			return j;
		}
}	
}

这次我在try语句块和finally语句块中都加入了return语句,猜猜会输出什么结果?i = 1?还是 i = 2 ? 还是让程序告诉我们答案吧!

java代码如下:

代码语言:javascript
复制
2

有的小伙伴就说了,肯定会输出2啊!程序里有try-catch结构时,代码块里如果有finally代码块,无论如何都会执行finally代码块,上面这段代码

finally代码块里有一个return,在执行finally的return方法时,程序的结果就返回了。所以主程序输出的是2。

恭喜这位小伙伴~你答对了结果~  但程序的运行过程不是这样的哦。

讲解如下:

主程序在调用test方法的时候会先执行try代码块里的代码,并先return  i=1;但并不会直接把return的结果返回给主函数,而是在暂时储存在栈空间里;

口说无凭!那就让神奇的debug看告诉我们事实,在MyEclipse中用debug进行调试会发现,程序会先执行try代码块里的i=1;此时紧接着会马上return    i=1; 事实见下图。

然后再执行finally代码块中的 代码, int  j = 2;  return j ; 此时执行完finally代码块的return j ; 后 ,程序就结束了,并不会再去执行返回try代码块中在栈空间里存储的 i=1;

栈空间里的 i = 1 ;  随着程序的结束 也就自动消失了~

这两个例子的结论就是:

1.如果try代码块里有return语句,而finally代码块里没有return语句,程序会先执行finally代码块里的代码然后再执行try代码块里的return语句;

2.如果try代码块和finally代码块里都有return语句,try代码块里的return语句会优先finally代码块里的return语句执行,但不会把返回的结果返回给主函数,

而是会把finally代码块里return的结果返回给主函数。

资历尚浅,如有疏漏之处欢迎指出~

但是是的s地方

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年07月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档