加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

javaIO——AutoCloseable 小试

发布时间:2020-12-15 08:01:46 所属栏目:Java 来源:网络整理
导读:前面在 IO 概述篇提到过,AutoCloseable 接口类会自动调用 close() 方法,那究竟具体怎么写呢?以及发生异常情况下或者多个资源是不是都能自动调用呢?我们来写一个简单的类测试一下就知道了。 ? 概述片地址:https://www.cnblogs.com/coding-one/p/11342024

  前面在 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. 可以声明多个资源类实例,使用 “;” 分隔即可,且多个资源实例会逆序调用(其实只要都能调用,顺序并不重要);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读