3

Closeable和AutoCloseable有什么区别?

 3 years ago
source link: https://my.oschina.net/lishangzhi/blog/5021095
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

导读:我们知道,在java中jvm虚拟机会自动去调用gc(垃圾回收器)去回收堆中没有被引用的对象,至于什么时候回收,是不确定的,同时有些是用到其他资源,jvm也不会进行回收,类似Io流中的FileInputStream使用到了硬盘资源,垃圾回收器是不会去回收的,因此,必须手动关闭掉。我们进行手动的编写close()方法进行关闭,然而,每次这些写会造成代码冗余不优雅,JDK中对于释放资源有Closeable和AutoCloseable可以使用,以下为详解。、

Closeable

Closeable源码

v2-a2b363c5566e501d4632d355eac5d93d_1440w.jpg

使用close需要注意

在java.io.包下 InputStream,outputStream, Reader, Writer 等基类都实现了Closeable接口,因为每次的IO操作结束之后都要去释放资源。

  • 如果在调用此方法之前 stream已经关闭 ,则方法失效;
  • 建议先关闭内部的资源,并标记为已关闭;
  • 优先抛出IO异常;

AutoCloseable

AutoCloseable接口位于java.lang包下,从JDK1.7开始引入。

由于位于java.lang包下,可以针对于所有实现该接口的流,而closable本身也实现了该接口,java的io流间接性的可以自动关闭接口,也就是说从jdk1.7开始,不需要手动去关流。

AutoCloseable源码

v2-67c4d81601c8f16b6061fa73aacf1697_1440w.jpg

{try}-with-resources的使用注意

在1.7之前,我们通过try{} finally{} 在finally中释放资源。

  • 在finally中关闭资源存在以下问题:
  • 自己要手动写代码做关闭的逻辑;
  • 有时候还会忘记关闭一些资源;
  • 关闭代码的逻辑比较冗长,不应该是正常的业务逻辑需要关注的;

v2-1d402588f148b0813222b27399c93d3e_1440w.jpg

很显然是很繁琐的。jdk1.7之后采用{try}-with-resources的解释

将可能抛出异常的代码块放入到try块中,在try结束的时候,会自动将这些资源关闭(调用close方法)。

{try}-with-resources关键点

带资源的try语句的3个关键点:

  • 由带资源的try语句管理的资源必须是实现了AutoCloseable接口的类的对象。
  • 在try代码中声明的资源被隐式声明为final。
  • 通过使用分号分隔每个声明可以管理多个资源。

v2-7720ecea18d0129f53a8ce2406265062_1440w.jpg

这样看起来是不是简单,舒服很多

原文地址:聊一聊Closeable和AutoCloseable有什么区别?

© 著作权归作者所有

portrait.gif

其他人还在看

tomcat的版本: 6.0.26 bin目录中有一个 tcnative-1.dll 文件,就是目前最新的版本 1.1.20.0 ,是2010年6月2日16:57分的. 不知道是否对旧版本也支持. 有提供对OPENSSL的支持
1.枚举类FileMode 指定操作系统打开文件的方式 CreateNew 指定操作系统应创建一个新的文件 Create 指定操作系统应创建一个新的文件。 如果该文件已存在,则会覆盖它 Open 指定操作系统应打开现有文件 OpenOrCreate 指定操作系统应打开一个文件,是否它存在,则否则,应创建一个新的文件 Truncate 指定操作系统应打开现有...
内容概要: SQLAlchemy flsak-sqlalchemy flask-script flask-migrate Flask的目录结构 一、SQLAlchemy 1、概述 SQLAlchemy是一个ORM的框架,ORM就是关系对象映射,具体可以参照Django中的ORM。 作用:帮助我们使用类和对象快速实现数据库操作 数据库:   -原生:MYSQLdb pymysql   区别就是 MYSQLdb 不支持python3...
如果你有过在大型跨国企业工作的经历,比如:利用收发邮件的形式,给目标用户提供一些解决方案,常见的是一些软件外包企业的callcenter,但是如果你游走过新马泰,菲律宾这样的国家,你会发现目前仍然有众多SEO人...
如果你在Hbase表中存在一些特征相同的记录,实际上就可以通过设置Filter的方式进行检索过滤。 比如这个特征是前缀相同。 ROW COLUMN+CELL 003_8618722111005_460014004369494 column=info:sex, timestamp=1318853623294, value=male Jerry1 column=info:sex, timestamp=1318917602868, value=male 003_8618722111005_460...
安装 After Effects CS6 在Mac OS 10.12.5 上无法直接安装, 需要浏览到安装的执行文件后才能进行 https://helpx.adobe.com/creative-cloud/kb/install-creative-suite-mac-os-sierra.html , 但是即使安装成功, 也不能正常启动, 会报"You can’t use this version of the application “Adobe After Effects CS6” with t...
维特国际英语怎么样,效果好不好啊?有上过的吗?简单介绍一下我自己吧,大学所学国际贸易专业,毕业以后就在一家外企工作,现在工作有一段时间了,明显感觉到力不从心,因为工作中需要用到英语的地方实在是太多了,所以就想找个英语培训机构好好补习一下。在网上了解了一下相关的英语培训机构,看得我眼花缭乱,光是深圳...
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.documentElement.clientWidth ==> 可见区域宽度 document.documentElement.clientHeight ==> 可见区域高度 FireFox中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象...
一、引言   作为一名学生,经常需要写学术论文,那么可选的有Latex和MS office。但是大家知道在linux上没办法用office。而linux上的wps对公式支持不太行。因此,学会用Latex来写论文比较好。在这里,博主就用texlive2017+Visual Studio Code来为Deepin系统搭配latex编写环境。 二、下载链接   【texlive2017】链接:...
1、查找/etc目录下大于1M且类型为普通文件的所有文件 2、打包/etc/目录下面所有conf结尾的文件,压缩包名称为当天的时间,并拷贝到/usr/local/src目录备份。 3、利用sed 取出ifconfig命令中本机的IPv4地址 4、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 5、处理/etc/fstab路径,使...
tomcat的版本: 6.0.26 bin目录中有一个 tcnative-1.dll 文件,就是目前最新的版本 1.1.20.0 ,是2010年6月2日16:57分的. 不知道是否对旧版本也支持. 有提供对OPENSSL的支持
1.枚举类FileMode 指定操作系统打开文件的方式 CreateNew 指定操作系统应创建一个新的文件 Create 指定操作系统应创建一个新的文件。 如果该文件已存在,则会覆盖它 Open 指定操作系统应打开现有文件 OpenOrCreate 指定操作系统应打开一个文件,是否它存在,则否则,应创建一个新的文件 Truncate 指定操作系统应打开现有...
内容概要: SQLAlchemy flsak-sqlalchemy flask-script flask-migrate Flask的目录结构 一、SQLAlchemy 1、概述 SQLAlchemy是一个ORM的框架,ORM就是关系对象映射,具体可以参照Django中的ORM。 作用:帮助我们使用类和对象快速实现数据库操作 数据库:   -原生:MYSQLdb pymysql   区别就是 MYSQLdb 不支持python3...
如果你有过在大型跨国企业工作的经历,比如:利用收发邮件的形式,给目标用户提供一些解决方案,常见的是一些软件外包企业的callcenter,但是如果你游走过新马泰,菲律宾这样的国家,你会发现目前仍然有众多SEO人...
如果你在Hbase表中存在一些特征相同的记录,实际上就可以通过设置Filter的方式进行检索过滤。 比如这个特征是前缀相同。 ROW COLUMN+CELL 003_8618722111005_460014004369494 column=info:sex, timestamp=1318853623294, value=male Jerry1 column=info:sex, timestamp=1318917602868, value=male 003_8618722111005_460...
安装 After Effects CS6 在Mac OS 10.12.5 上无法直接安装, 需要浏览到安装的执行文件后才能进行 https://helpx.adobe.com/creative-cloud/kb/install-creative-suite-mac-os-sierra.html , 但是即使安装成功, 也不能正常启动, 会报"You can’t use this version of the application “Adobe After Effects CS6” with t...
维特国际英语怎么样,效果好不好啊?有上过的吗?简单介绍一下我自己吧,大学所学国际贸易专业,毕业以后就在一家外企工作,现在工作有一段时间了,明显感觉到力不从心,因为工作中需要用到英语的地方实在是太多了,所以就想找个英语培训机构好好补习一下。在网上了解了一下相关的英语培训机构,看得我眼花缭乱,光是深圳...
IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象高度 document.documentElement.clientWidth ==> 可见区域宽度 document.documentElement.clientHeight ==> 可见区域高度 FireFox中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象...
一、引言   作为一名学生,经常需要写学术论文,那么可选的有Latex和MS office。但是大家知道在linux上没办法用office。而linux上的wps对公式支持不太行。因此,学会用Latex来写论文比较好。在这里,博主就用texlive2017+Visual Studio Code来为Deepin系统搭配latex编写环境。 二、下载链接   【texlive2017】链接:...
1、查找/etc目录下大于1M且类型为普通文件的所有文件 2、打包/etc/目录下面所有conf结尾的文件,压缩包名称为当天的时间,并拷贝到/usr/local/src目录备份。 3、利用sed 取出ifconfig命令中本机的IPv4地址 4、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 5、处理/etc/fstab路径,使...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK