文档章节

java7中的try with resources浅析

qalong
 qalong
发布于 2015/04/24 09:27
字数 276
阅读 56
收藏 1

前言

学过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
博文 12
码字总数 4244
作品 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
0
4
try-with-resources语句

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

柳哥
2014/10/06
0
0
java程序员修炼之道

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

zhchl2010
2015/09/20
83
0
一起学Java7新功能扩展——深入历险分享(一)

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

Beyond-Bit
2012/09/03
0
26
java7使用try-with-resource语法糖时,如果要想让数据库rollback,该怎么做?

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

老笨牛
2015/01/08
150
2

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
今天
1
0
AVA中CAS-ABA的问题解决方案AtomicStampedReference

了解CAS(Compare-And-Swap) CAS即对比交换,它在保证数据原子性的前提下尽可能的减少了锁的使用,很多编程语言或者系统实现上都大量的使用了CAS。 JAVA中CAS的实现 JAVA中的cas主要使用的是...

码代码的小司机
今天
2
0
Android JNI开发系列(十三) JNI异常处理

JNI 异常处理 JNI异常与JAVA处理异常的区别 JAVA 有异常处理机制,而JNI没有 如果JAVA中异常没有捕获,后面的代码不会执行,JNI会执行 JAVA编译时的异常,是在方法显示的声明了某一个异常,编...

蔡小鹏
今天
2
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

Linux就该这么学
今天
3
0
Qt那些事0.0.7

在帮助文档(Overview - QML and C++ Integration)中随缘遇到一张图,是关于C++对象与QML整合介绍的,值得标记下来,虽然大部分功能也有所涉猎,但是还是留个记号,万一哪天我失忆了还想写Q...

Ev4n
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部