首页 > 编程语言 > 详细

javaIO——AutoCloseable 小试

时间:2019-08-17 15:29:34      阅读:54      评论:0      收藏:0      [点我收藏+]

  前面在 IO 概述篇提到过,AutoCloseable 接口类会自动调用 close() 方法,那究竟具体怎么写呢?以及发生异常情况下或者多个资源是不是都能自动调用呢?我们来写一个简单的类测试一下就知道了。

 

  概述片地址:https://www.cnblogs.com/coding-one/p/11342024.html

 

  测试代码:

package com.one.jdksrc.java.io;

import java.io.Closeable;
import java.io.IOException;

/**
* @author haoya_Coding_one
* @version 1.0
* @create 2019/8/13 9:32
* @description TODO
*/
public class CloseableTest {
public static void main(String[] args){

System.out.println("------------------在 try{} 中声明不会调用-----------------------");
try {
HowToAutoClose howToAutoClose = new HowToAutoClose("1");
howToAutoClose.doNothing();
}catch (Exception ex){
System.out.println(ex.getMessage());
}

System.out.println("------------------在 try() 中声明会调用-----------------------");
try(HowToAutoClose howToAutoClose = new HowToAutoClose("1")) {
howToAutoClose.doNothing();
}catch (Exception ex){
System.out.println(ex.getMessage());
}

System.out.println("------------------出现异常情况下仍然会调用,并且是先调用close再捕获异常-----------------------");
try(HowToAutoClose howToAutoClose = new HowToAutoClose("1")) {
howToAutoClose.doNothing();
throw new NullPointerException("这是异常信息");
}catch (Exception ex){
System.out.println(ex.getMessage());
}

System.out.println("------------------所有资源都会调用,顺序与声明的顺序相逆-----------------------");
try(HowToAutoClose howTo1 = new HowToAutoClose("1");
HowToAutoClose howTo2 = new HowToAutoClose("2");
HowToAutoClose howTo3 = new HowToAutoClose("3")) {
//测试多个资源时是否都调用,以及调用顺序
}catch (Exception ex){
System.out.println(ex.getMessage());
}

System.out.println("------------------try{} 中 return 也会调用-----------------------");
try(HowToAutoClose howToAutoClose = new HowToAutoClose("1")) {
howToAutoClose.doNothing();
return;
}catch (Exception ex){
System.out.println(ex.getMessage());
}
}

public static class HowToAutoClose implements Closeable {
private String param = null;

public HowToAutoClose(String integer){
param = integer;
}

public void doNothing(){

}
@Override
public void close() throws IOException {
System.out.println(param);
}
}
}

  运行结果:

 

  技术分享图片

 

  结论:

    1. 资源类需要声明在 try() 小括号内;

    2. try(){} 大括号代码块中发生 异常或者 return,依然会自动调用 close() 方法;

    3. 可以声明多个资源类实例,使用 “;” 分隔即可,且多个资源实例会逆序调用(其实只要都能调用,顺序并不重要);

javaIO——AutoCloseable 小试

原文:https://www.cnblogs.com/coding-one/p/11368653.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!