关于java中的if-else与finally,return的结合使用.

关于java中的if-else与finally,return的结合使用.

天涯离梦残月幽梦 发布于 2021-11-27 字数 459 浏览 844 回复 9

public static void main(String[] args) {
		int i = 2;
		try{
			if(1==i){
				System.out.println("i==1");
			}
			else{
				System.out.println("i==其他");
				return ;
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
			System.out.println("不论如何都执行finally");
		}

	}

好有意思的执行过程,加断点试试.请问下第九行中的return最后return到哪了呢?

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

灵芸 2021-12-01 9 楼

把return改为System.exit(0);效果就又不一样了

清欢 2021-12-01 8 楼

这个好像是一个面试题,就是问你是return是在finally执行之前还是之后执行,答案是在finally执行之后返回.

初见你 2021-12-01 7 楼

这只是源码层次的表现形式,可以想象下
编译器编译后将return放到哪里去了

海之角 2021-12-01 6 楼

先执行了finally,再执行的return,return之后程序就结束了。

夜无邪 2021-11-30 5 楼

return 语句可以使其从当前方法中退出,返回到调用该方法的语句处,继续程序的执行。我就不明白他为什么执行完了之后又跳到return 所在处呢,干什么去了?

柳絮泡泡 2021-11-30 4 楼

先执行了finally,再执行的return,return之后程序就结束了。

多情癖 2021-11-30 3 楼

你可以加断点试试

做个少女永远怀春 2021-11-28 2 楼

到finally了,没有finally到方法尾结束

2021-11-28 1 楼

对于异常处理的部分,每个catch和finally都对应的有自己的代码快。 你这个例子中,程序在执行try和catch的代码之后必须进入finally执行对应的代码,如果中间又return语句,那么也会先进入finally部分执行完毕之后再return(但是如果finally中有return的话,会再finally中直接跳出当前方法并返回)。  虚拟机的规范规定虚拟机的实现是必须这么做的。 

具体细节可以参考java虚拟机规范。