`
kingj
  • 浏览: 421624 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java在try,catch中return,在finally中也return会发生什么奇迹?

 
阅读更多

今天看到一个很基础的问题,如下:

int f(){
		try{
			
			return 1;
		}finally{
			return 2;
		}
	}

 不用说,方法f都会返回2,最初看来可能有点疑惑,为了搞清楚在try块中使用return为什么会被finally覆盖了,于是

调用了javap来查看javac生成的字节码如下:

 

* int f();
  Code:
   0:   goto    4
   3:   pop
   4:   iconst_2
   5:   ireturn
  Exception table:
   from   to  target type
     0     3     3   any

 

在这里大家可以清楚的看到javac编译器压根就没有将try块中的return 1;这行代码生成对应的字节码:

    iconst_1

    istore_0

    ireturn

而是直接goto到iconst_2然后ireturn了,也就是说如果一个方法中有多路返回的路径时,在try中返回,catch中返回,以及在finally中返回的话,会直接忽略try块和catch块中的字节码,直接goto到finally块中的return语句。

 

下面的例子同样说明了这个问题:

 

int g(){
		try{
			return 1;
		}catch(Exception e){
			return 3;
		}finally{
			return 2;
		}
	}

 同样生成的字节码为:

    int g();
  Code:
   0:   goto    8
   3:   astore_1
   4:   goto    8
   7:   pop
   8:   iconst_2
   9:   ireturn
  Exception table:
   from   to  target type
     0     3     3   Class java/lang/Exception

     0     7     7   any
程序进入方法g时,直接goto8,也就是iconst_2,ireturn直接返回了

 

 

总之:在try{...}catch(XX){...}finally{...}中,如果finally中return,那么try{..}以及catch{...}中的返回都被finally覆盖

分享到:
评论

相关推荐

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    Jungle68#-#[Java] try catch finally,try里有return,finally还执行么?1

    Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据

    关于Java中的try-catch-finally语句和return

    第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)  第二:finally里面不建议放return语句,根据需要,return语句...

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序超详细讲解,包看包会。

    Java中finally块执行与return关系深度剖析

    Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。

    谈谈Java中try-catch-finally中的return语句

    我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种...

    try-catch-finally执行顺序验证

    try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...

    try-catch-finally-return-in-finally.rar_return

    The production IfStatement : if ( Expression ) Statement else Statement is evaluated as follows:.

    java大厂面经、直击BAT

    finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时虽然 finally 里对 return 的值进行了修改,但 return 的值并不改变这种...

    Java常见面试题208道.docx

    77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 78.常见的异常类有哪些? 八、网络 79.http 响应码 301 和 302 代表的是什么?有什么区别? 80.forward 和 redirect 的区别? 81.简述 tcp...

    毕业就业-刷题库Java面试题大全(2021年-2022年).rar

    8. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 9. 类 ExampleA 继承 Exception,类 ExampleB 继承ExampleA。 10. 常见的 RuntimeException 有哪些? 11. Java常见异常有哪些 四、并发...

    史上最全java面试,103项重点知识,带目录

    77. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 36 78. 常见的异常类有哪些? 38 八、网络 39 79. http 响应码 301 和 302 代表的是什么?有什么区别? 39 80. forward 和 redirect 的...

    try catch finally的执行顺序深入分析

    首先执行try,如果有异常执行catch,无论如何都会执行finally,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出

    Java问题宝典2012版

    38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 27 39、下面的程序代码输出的结果是多少? 28 40、final, finally, finalize的区别。 30 ...

    java 面试题 总结

    在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...

    java实验2实验报告.doc

    实验指导书 实验名称:包、接口与异常处理 学时安排:2 实验类别:综合设计型实验 实验要求:1人1组  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一、实验目的 1、掌握java字符串处理...

    Java面试宝典-经典

    38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 25 39、下面的程序代码输出的结果是多少? 25 40、final, finally, finalize的区别。 27 ...

    JAVA面试题最全集

    91.Java中IDL是什么? 92.ISO9000和CMM是什么?IS09000和CMM(软件能力成熟度模型)认证是国际上通用的软件质量评估方法.CMM的五个成熟度等级。 第一,谈谈final, finally, finalize的区别。 final?修饰符...

    Java面试宝典2010版

    38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 25 39、下面的程序代码输出的结果是多少? 25 40、final, finally, finalize的区别。 27 ...

    java面试题之try中含return语句时代码的执行顺序详解

    主要介绍了关于java中的一道面试题,这套题就是在try中含return语句时代码的执行顺序,这个问题看似简单,却暗藏杀机啊!文中通过一个个例子详细介绍了其中玄机,需要的朋友可以参考学习,下面来一起看看吧。

Global site tag (gtag.js) - Google Analytics