“finally block does not complete normally”的警告

转载 2012年03月21日 17:00:45

转自:http://sw1982.iteye.com/blog/773331


今天用try-finally的时候,整出一个“finally block does not complete normally”的警告。想了半天也没明白什么一个情况。

 可以看下面的代码, return 写在finally块就会得到警告!解决方案: return放到finally外面。


但是,java里面不是可以保证finally一定会执行的么,为什么不可以在finally块做return???

 

细细看道来:

 

debug一下这个函数,就会惊讶的发现, 里面抛出的异常会被finally吃掉。 这也就是为什么会被警告的原因。

	 @SuppressWarnings("finally")
	 private boolean isReturnWithinFinally() {
	 try {
	 if (true) throw new RuntimeException();
	 } finally {
	 return true; // This hides the exception
	 }
	 }

那么,下面这样会不会ok呢?先把异常处理

	public static void main(String[] args) {
		try{
			throw new RuntimeException();
		}catch(Exception e) {
			//
		}
		finally {
			return;
		}
	}

结论是:依旧不行。java里面的异常分为可不获和不可捕获两类,即便使用到catch块,也会导致非捕获的错误被finally吃掉。

 

因此,return一定要放到finally外面。

 

===1.java异常简介

类Throwable有两个直接子类:Error和Exception。Error类对象(如动态连接错误等),由Java虚拟 机生成并抛弃(通常,Java程序不对这类 异常进行处理) ;Exception类对象是Java程序处理或抛弃的对象。它有各种不同的子类分别对应于不同类型的例外。其中类RuntimeException代表运行时由Java虚拟机生成的 异常,如算术运算异常ArithmeticException(由除 0错等导致)、数组越界例外ArrayIndexOutOfBoundsException等;其它则为非运行时异常,如输入输出例外 IOException等。Java编译器要求 Java程序必须捕获或声明所有的非运行时异常 ,但对运行时异常 可以不做处理。

 

附赠示例代码一个:






The serializable class XXX does not declare a static final serialVersionUID field of type long的警告

【现象】 当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个提示功能告诉你去定义之。   【serialVersio...

关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告

关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警...

工程中报错或者警告(持续更新)(例如:does not contain bitcode. You must rebuild it with bitcode enabled )

1.问题描述 ld: '/Users/zfj_apple/Desktop/EaseMobDemo/EaseMobSDK/lib/libEaseMobClientSDK.a(easemobvideo.o...

WCF问题集锦:ReadResponse failed: The server did not return a complete response for this request.

今日,对代码进行单元测试时,发现方法GetAllSupplyTypes报如下错误: [Fiddler] ReadResponse() failed: The server did not return...
  • mole
  • mole
  • 2015年07月16日 16:08
  • 4326

Cannot complete the install because one or more required items could not be found

安装ADT插件的时候出现此错误  在配置Eclipse的时候,安装ADT搭建Android开发环境的时候出现如下错误: Cannot complete the install becaus...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:“finally block does not complete normally”的警告
举报原因:
原因补充:

(最多只允许输入30个字)