首页 > 代码库 > 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语句