Java 处理资源的try语句 (try-with-resources, TWR)

JAVA中try块的标准形式很通用,但有些常见的情况需要开发者小心编写catchfinally块。这些情况是清理或关闭不再需要使用的资源。

正常情况下,我们用try-catch-finally语句来实现打开文件资源,最后再关闭清理文件资源。例如下面的代码:

public class test1 {

	public static void main(String[] args) {
		FileInputStream file = null;
		try {
			file = new FileInputStream(new File("demo.txt"));
			/*
			 * 处理这个文件的操作
			 */
		} catch(IOException e){
			e.printStackTrace();
		} finally {
			//关闭资源
			if(file != null) {
				try {
					file.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}	
	}
}

发现这种操作很繁琐,代码也很多,那有没有什么简便的方法呢?
就像python里面的with语句一样呢
在这里插入图片描述
那么恭喜你,确实有!
Java(从第7版起)提供了一种机制,能自动关闭需要清理的资源——处理资源的try语句(try-with-resources, TWR)
下面简单展示如何使用FileInputStream类打开文件(得到的对象需要处理)来介绍语法:

public class test1 {

	public static void main(String[] args) {
		try(InputStream is = new FileInputStream("demo.txt")){
			/*
			 * 处理这个文件的操作
			 */
		}catch (IOException e) {
			//这里处理FileNoFoundExceotion等异常
			e.printStackTrace();
		} 
	}
}

发现这种新型的方法,去掉了finally块,而且不需要编写catch块。
这种新型try语句的参数都是需要清理的对象。这些对象(严格来说,这些对象必须实现AutoCloseable接口)的作用域在try块中(也就是把要释放的资源写在 try 后的()中),不管 try 块以何种方式退出,都会自动清理。开发者无需编写任何catchfinally块,Java编译器会自动插入正确的清理代码。
因此,我建议所有处理资源的新代码都应该使用TWR形式编写,因为这种形式比自己手动编写catch块更少出错,而且不会遇到麻烦的技术问题,例如终结机制

好了现在的Java:

在这里插入图片描述


注:表情来源于网络:侵权删

猜你喜欢

转载自blog.csdn.net/weixin_43347550/article/details/106208765