博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
catch,finally执行遇到return语句怎么办
阅读量:6495 次
发布时间:2019-06-24

本文共 1229 字,大约阅读时间需要 4 分钟。

hot3.png

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也是有点兴趣,喜欢研究,看了网上的一些资料,和自己实验写出的。如果有什么不对的,欢迎指正,谢谢。

转载于:https://my.oschina.net/pangzhuzhu/blog/301760

你可能感兴趣的文章
伪终端
查看>>
N皇后问题的位运算求解——目前最快的方法
查看>>
IL rewriting
查看>>
Java 事件适配器 Adapter
查看>>
poj 3321 Apple Tree
查看>>
【转】 LDA必读的资料
查看>>
百度重置页面自动跳转脚本
查看>>
Unity3D常用代码总结
查看>>
Ubuntu 13.10 安装Terminalx 后更改默认终端设置
查看>>
js中document.write的那点事
查看>>
【WP8】ResourceDictionary
查看>>
Lambda表达式可以被转换为委托类型
查看>>
理解正向索引
查看>>
xp/2003开关3389指令
查看>>
Oracle中merge into的使用
查看>>
iOS 设置UILabel 的内边距
查看>>
Android ViewPager使用具体解释
查看>>
php 命中算法
查看>>
Effective Java - Item 1: Consider static factory methods instead of constructors
查看>>
Spring注解@Component、@Repository、@Service、@Controller,@Autowired、@Resource用法
查看>>