首页 > 代码库 > java finally中含return语句
java finally中含return语句
《java核心技术卷一》中提到过:当finally子句包含return 语句时(当然在设计原则上是不允许在finally块中抛出异常或者 执行return语句的,我不明白为何java的设计者并没有在语法上禁用这样的形式),将会出现一种意想不到的结果。假设利用return语句从try 语句块中退出。在方法返回前,finally子句的内容将被执行。如果finally子句中也有一个return语句,这个返回值将会覆盖原始的返回值。
但作者没有提及的是,finally中的return语句不仅会覆盖原返回值,还会”吃掉“在catch子句中抛出的异常。测试代码如下:
import java.io.*;public class ReturnInFinally{ public static void main(String[] args){ try{ boolean i=Test1(); System.out.println("End of try Test1"); }catch(Exception ex){ System.out.println("Catch exception in Main() "); }finally{ System.out.println("Finally in Main() "); } boolean j=Test2(); System.out.println("j=" + j); } private static boolean Test1() throws Exception{ try{ throw new Exception("Exception thrown by Test1()"); }catch(Exception ex){ System.out.println("Catch exception in Test1() "); throw ex;//重新抛出异常 }finally{ return true;//抛出的异常被return”吃“掉 } } private static boolean Test2(){ try{ return false; }finally{ return true; } }}
运行结果为:
Catch exception in Test1() End of try Test1Finally in Main() j=true
java finally中含return语句
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。