码迷,mamicode.com
首页 > 编程语言 > 详细

java finally中含return语句

时间:2014-12-15 21:40:30      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   java   on   div   log   代码   as   

《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 Test1
Finally in Main() 
j=true

  

  

java finally中含return语句

标签:blog   io   ar   java   on   div   log   代码   as   

原文地址:http://www.cnblogs.com/mosmith/p/4165842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!