文档章节

java7中的try with resources浅析

qalong
 qalong
发布于 2015/04/24 09:27
字数 276
阅读 51
收藏 1
点赞 1
评论 0

前言

学过C#的同学应该熟悉下面的这个代码:

using (Class1 cls1 =new Class1())
{
  // the code using cls1
}// call the Dispose on cls1

主要的工作是实例化一个Class1,然后用完了资源自动关闭。

实现

其实从java7开始也提供了类似的实现,如代码:

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Main {

	public static void main(String[] args) throws Exception {
		try (FileInputStream fis = new FileInputStream("/try_with_resources.txt"); BufferedInputStream	bufferedInput = new BufferedInputStream(fis)) {
		
			int data = bufferedInput.read();
			while (data != -1) {
				System.out.print((char) data);
				data = bufferedInput.read();
			}
			
		}
	}
}


原理

其实原理很简单,我们以FileInputStream为例,查看类的源代码,实现了一个AutoCloseable的接口。jvm在try块结束的时候会检查这个类有没有集成AutoCloseable接口,如果集成了就触发实现的close()方法,实现资源的自动回收。

实践

原理有了,我们就可以自己实现一个AutoCloseable的实现类做个测试了,代码很简单就不解释了:

public class Main {

	public static void main(String[] args) throws Exception {
		
		try (TestAutoClosable t = new TestAutoClosable();) {
			t.doit();
		}
		
	}

	public static class TestAutoClosable implements AutoCloseable {

		public void doit() {
			System.out.println("DO IT!");
		}

		@Override
		public void close() throws Exception {
			System.out.println("AutoCloseable");
		}

	}
}




© 著作权归作者所有

共有 人打赏支持
qalong
粉丝 5
博文 10
码字总数 3738
作品 0
威海
技术主管
Java7的新特性1-project coin

Project coin project coin是Java一些语法改进的一个项目。 Strings in switch 在Java1.7之前,switch语句只能是byte、char、short和int以及包装类和枚举常量,比如: 在Java7中,扩展了允许...

mushui ⋅ 2013/07/29 ⋅ 4

try-with-resources语句

这节讲的是Java7中引入的使用try语句进行资源管理的新用法。这节的内容与上一节介绍的异常处理的关系比较密切。上节中介绍的Throwable中的新方法addSuppressed就是为try-with-resourcces语句...

柳哥 ⋅ 2014/10/06 ⋅ 0

java程序员修炼之道

第一部分:用Java7做开发 第一章:初识java7 1.1语言与平台《Java语言规范(JLP)》《JVM规范(VMSpec)》 1.2Coin项目:浓缩的都是精华 修改过程:1.更新JLS 2.在源码编译器中实现一个原型 3.为修改...

zhchl2010 ⋅ 2015/09/20 ⋅ 0

java7-coin项目

coin项目: 1. try-with-resource结构--可自动关闭资源。相比于之前需要调用close()方法才可关闭。 2. switch中添加了字符串支持。 3. 改变了数字常量的展示。现在可以更好的理解一串数字...

李矮矮 ⋅ 2015/03/17 ⋅ 0

一起学Java7新功能扩展——深入历险分享(一)

特此声明:因网友疑问,这里声明一个重要的安全,就是大家所知的java惊现0day漏洞!8月30日,Oralce紧急发布了新版本的JDK和JRE,原因是发现了一个严重的0day漏洞CVE-2012-4681,远程攻击者可...

Beyond-Bit ⋅ 2012/09/03 ⋅ 26

java7的异常处理新特性

addSuppressed()方法 开发人员对异常处理的try-catch-finally语句块都比较熟悉。如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行。但是f...

柳哥 ⋅ 2014/10/06 ⋅ 0

深入理解Java 7(笔记)

switch Java 7 中新增加了对String的支持,除此之外还支持int、char、byte、short及其封装类Integer、Character、Byte、Short。对于基本类型的支持我们很容易理解,但是String类型使用了不同...

chris_2009 ⋅ 2016/03/30 ⋅ 0

java8之Stream API(创建Stream)

你已经了解到了,通过Java8在Collection接口中新添加的stream方法,可以将任何集合转化为一个Stream。如果你面对的是一个数组,也可以用静态的Stream.of方法将它转化为一个Stream: package ...

柳哥 ⋅ 2015/05/31 ⋅ 0

java7使用try-with-resource语法糖时,如果要想让数据库rollback,该怎么做?

@红薯 你好,想跟你请教个问题:java7使用try-with-resource语法糖时,如果要想让数据库rollback,该怎么做?java6里我是将它放在try-catch里,但这个用法在java7里行不通。。...

老笨牛 ⋅ 2015/01/08 ⋅ 2

jdk1.7的新特性学习

下面是7个已经完成的新特性: 对collections的语言级支持 自动资源管理 改进泛型在创建实例时的类型引用 带下划线的数字 在switch中使用String 二进制文字 简化的可变参数方法调用 Java7还有...

明舞 ⋅ 2014/07/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring Email

一、普通邮件 maven依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.6.RELEASE</version>......

BobwithB ⋅ 8分钟前 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 11分钟前 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 11分钟前 ⋅ 0

IT行业的变革就像世界杯德国对战墨西哥一样难以预测[图]

最近在观看世界杯,尤其是昨天的比赛,上一届卫冕冠军德国队居然0:1告负墨西哥,这创造了历史,首先是墨西哥从来没赢过德国队,其次是德国队36年来首站没输过,再差也是打平,而这次,德国队...

原创小博客 ⋅ 30分钟前 ⋅ 0

解决CentOS6、7,/etc/sysconfig/下没有iptables的问题

一、Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service iptables save 3.重启iptables服务: service ...

寰宇01 ⋅ 40分钟前 ⋅ 2

数据库备份和恢复

备份:mysqldump -u root -p 数据库>磁盘路径 恢复:mysql -u root -p 数据库<sql脚本的磁盘路径

anlve ⋅ 今天 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部