java7中的try with resources浅析
博客专区 > qalong 的博客 > 博客详情
java7中的try with resources浅析
qalong 发表于3年前
java7中的try with resources浅析
  • 发表于 3年前
  • 阅读 42
  • 收藏 1
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购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");
		}

	}
}




标签: java try resource
共有 人打赏支持
粉丝 5
博文 10
码字总数 3738
×
qalong
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: