Java 6和Java 7对throw语句的不同理解
程序员文章站
2022-05-27 17:26:24
...
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异常即可。
上一篇: 你知不知道思念一个人的滋味
下一篇: 都是因为喜欢你,所有从未怪过你