Java使用 try-with-resources 实现自动关闭资源的方法
作者:C、空白格 发布时间:2022-01-09 06:54:46
标签:java,try-with-resources,关闭资源
1、 在Java1.7之前,我们需要通过下面这种方法, 在finally中释放资源,这种方法有点繁琐。
BufferedReader br = null;
String str;
try {
br = new BufferedReader(new FileReader(""));
while ((str = br.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、在java1.7之后,可以使用try-with-resources实现自动关闭资源
try (BufferedReader br = new BufferedReader(new FileReader(""))) {
while ((str = br.readLine()) != null) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
这样看上去,是不是感觉代码干净了许多,当程序运行完离开try语句块时,( )里的资源就会被自动关闭。
但是try-with-resources还有几个关键点要记住:
①、try()里面的类,必须实现了AutoCloseable接口。
②、在try()代码中声明的资源被隐式声明为fianl。
③、使用分号分隔,可以声明多个资源。
3、自定义类并实现AutoCloseable接口
class TestAutoClosable implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("close");
}
public void test() {
System.out.println("test");
}
}
接下来我们测试下,我们写得自定义类
try (BufferedReader br = new BufferedReader(new FileReader("E:/test.txt"));
TestAutoClosable testAutoClosable = new TestAutoClosable()) {
testAutoClosable.test();
} catch (Exception e) {
e.printStackTrace();
}
当调用testAutoClosable.test()方法时,下面是控制台打印的:
test
close
可以看到资源被成功关闭。
来源:https://blog.csdn.net/qq_39486119/article/details/106782848


猜你喜欢
- 上次给一个网站写网站 前后端分离 最后跪在ajax跨域上面了 自己在网上找了个方法 亲试可用
- 使用ApplicationContext获取bean对象编写一个ApplicationContextFactory工厂类public cla
- 主要介绍Android中如何使用rotate实现图片不停旋转的效果。Android 平台提供了两类动画,一类是 Tween 动画,即通过对场
- Java中存在着两种Random函数:java.lang.Math.Random;调用这个Math.Random()函数能够返回带正号的do
- 服务器端我们用软件模拟,是一个很小巧的软件,下载软件NetAssist:http://xiazai.jb51.net/201403/tool
- 1、判断实体对象是否为空2、判断对象所有属性是否为空3、特别注意,实体类中如果有基本数据类型,会影响判断package com.liuxd.
- LockSupport 简介LockSupport 是 Java 并发编程中一个非常重要的组件,我们熟知的并发组件 Lock、线程池、Cou
- 使用流读取、写入文件使用流把文件读取到字节数组://FileMode.Create, FileMode.Append //FileAcces
- 序言:使用MyBatis3提供的注解可以逐步取代XML,例如使用@Select注解直接编写SQL完成数据查询,使用@SelectProvid
- 同样该功能需要加载命名空间using System.Runtime.InteropServices;private const uint W
- 一、什么是iText?在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Js
- 简介通过 pulsar-flink-connector 读取到 Apache pulsar 中的namespaces、topics的元数据信
- 一、Filefile是文件和目录路径名的抽象表示1.1 File的用法用法:File file = new File("路径名&q
- 最近看Android FrameWork层代码,看到了ThreadLocal这个类,有点儿陌生,就翻了各种相关博客一一拜读;自己随后又研究了
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe
- 前言前一段时间做了一个项目,需要解决中文、繁体、英文的国际化问题,所以本文将详细介绍springboot页面国际化配置的过程方法如下1.引入
- 一、策略模式到底是什么?策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替
- SpringMvc中普通类注入Service为null场景:使用Quartz定时器时,普通的java类需要注入spring的service类
- 最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小/** * 自定义TextView,文本内容自动调整字体大小以适应TextVie
- flutter中的布局flutter布局机制的核心是组件。在flutter中,几乎所有的东西都是组件,布局模型也不例外。图片,Icon, 文