欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 6和Java 7对throw语句的不同理解

程序员文章站 2022-05-05 08:53:57
...

1 代码示例

import java.io.*;

public class ThrowTest2
{
	public static void main(String[] args)
		// Java 6认为①号代码可能抛出Exception,
		// 所以此处声明抛出Exception
		throws Exception
		// Java 7会检查①号代码可能抛出异常的实际类型,
		// 因此此处只需声明抛出FileNotFoundException即可。
		//throws FileNotFoundException
	{
		try
		{
			new FileOutputStream("a.txt");
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
			throw ex;        // ①
		}
	}
}

 

2 代码分析

Java 6对该代码理解:Java编译器处理“简单而粗暴”——由于在捕获该异常时声明ex类型是Exception,因此Java编译器认为这段代码可能抛出Exception异常,所以包含这段代码的方法通常需要声明抛出Exception异常。

Java 7对该代码理解:Java编译器会执行更细致的检查,Java 编译器会检查throw语句抛出异常的实际类型,这样编译器知道①号代码处实际上只可能抛出FileNotFoundException异常,因此在方法签名中只声明抛出FileNotFoundException异常即可。

相关标签: throw