Java基础之JDK7关于异常的新特性try()的使用

探讨Java 7中引入的ARM块(自动资源管理)如何处理文件输入流(FileInputStream)的异常,解释为何捕获IOException而非FileNotFoundException,以及自动关闭资源时可能出现的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

part1  为什么在try后面括号中出现FileNotFoundExecption 但是需要捕获的是IOException而不是FileNotFoundException?

代码如下
 

try (FileInputStream is = new FileInputStream("d:/temp/tt.txt");){

		} catch (FileNotFoundException e) { // 为什么需要捕获的是IOException而不是FileNotFoundException?
			System.out.println("执行了catch部分");
//			((Throwable) e).printStackTrace();
		} finally {
			System.out.println("执行了finally部分");
		}

代码报错:Unhandled exception type IOException thrown by automatic close() invocation on is

从报错的内容上大致我们可以得知,is自动调用close()从而抛出了未解决的IOException异常类型

原因是 Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。带有resources的try语句声明一个或多个resources。resources是在程序结束后必须关闭的对象。try-with-resources语句确保在语句末尾关闭每个resources。任何实现java.lang.AutoCloseable,包括实现了java.io.Closeable的类,都可以作为resources使用。      也就是try()括号中的代码自动实现了 close()  但是close()会引起 IOException  所以下面catch需要追加IOException.

追加后IOEexception后  由于FIleNotFoundException是 IOException的子类  所以 只需要IOException即可满足。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值