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

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异常即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值