前面在 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 小试的更多相关文章

  1. javaIO——概述

    以前看java书,都将IO作为一个大的章节甚至模块来编写,可见IO在java语言中的重要性. java的流按功能和处理的目标数据不同可以分为字节流和字符流.字符流处理的基本数据单元是字符:字节流处理的 ...

  2. Java基础 Java-IO流 深入浅出

    建议阅读 重要性由高到低 Java基础-3 吃透Java IO:字节流.字符流.缓冲流 廖雪峰Java IO Java-IO流 JAVA设计模式初探之装饰者模式 为什么我觉得 Java 的 IO 很复 ...

  3. 小试ASP.NET MVC——一个邀请页面的实现

    上篇博客我们大体介绍了ASP.NET MVC以及如何去新建项目,这篇博客我们讲点干货.小试ASP.NET MVC,我们来写一个简单的邀请WEB. 先来建立一个Models,叫GuestResponse ...

  4. JavaIO学习笔记(五)

    JavaIO前期准备 什么是同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 什么是异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO ...

  5. java IO之AutoCloseable,Closeable和Flushable接口

    有3个接口对于流类相当重要.其中两个接口是Closeable和Flushable,它们是在java.io包中定义的,并且是由JDK5添加的.第3个接口是AutoColseable,它是由JDK7添加的 ...

  6. javaIO系统----再看装饰者模式

    javaIO系统拥有各种各样的类,尤其是每次要进行读写操作时,总会一层套一层的new,以前不明白为什么要这样做,不过学习了适配器模式后,对于这种做法立刻了解了:动态扩展IO的功能,使之符合使用者的习惯 ...

  7. Java学习日记之 Java-IO流

    Java中的IO流在处理上分为字节流和字符流.字节流和字符流的区别 : 1.字节流读取的时候,读到一个字节就返回一个字节:  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8 ...

  8. canvas游戏小试:画一个按方向键移动的圆点

    canvas游戏小试:画一个按方向键移动的圆点   自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...

  9. javaIO框架小析

    IO即数据读写.数据是应用的中心要素,而数据读写的能力和可扩展性是编程平台的基础支撑. 概念框架 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : ...

随机推荐

  1. protected-broadcast 规范使用系统应用组件自定义广播

    1. protected-broadcast 规范使用系统应用组件自定义广播 参考:https://blog.csdn.net/TaylorPotter/article/details/7019424 ...

  2. Socket概述

    Socket套接字概述: 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字. 通信的两端都有Socket. 网络通信其实就是Socket间的通信. 数据在两个Socket ...

  3. cs6.8-oracle挂载ceph

    https://ceph-users.ceph.narkive.com/EgcYJhbG/hammer-0-94-1-still-getting-feature-set-mismatch-for-ce ...

  4. 智能指针-共享式shared_ptr

    #include <iostream>#include <string>#include <vector>#include <memory> using ...

  5. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_05-新增页面-服务端-接口测试

    其从程序swaggerUI测试 pageName和别名都是 test003 { "dataUrl": "string", "htmlFileId&qu ...

  6. BTE的一些知识

    1.今天遇到一个问题,看项目上做了BTE增强00001120 事件的BTE 但是自定义函数  更改了参数  t_bseg  t_bkpf MODIFY t_bkpf FROM ls_bkpf TRAN ...

  7. Jmeter 逻辑控制器 之 Include Controller

    一.认识 Include Controller Include Controller :译为包含控制器,用来添加 Test Fragment(测试片段).具体是什么意思呢,我们先来了解下 Test F ...

  8. postman--接口网站测试

    直接在官网下载安装即可 https://www.getpostman.com/downloads/

  9. 设计模式七大原则(C++描述)

    前言 最近在学习一些基本的设计模式,发现很多博客都是写了六个原则,但我认为有7个原则,并且我认为在编码中思想还是挺重要,所以写下一篇博客来总结下 之后有机会会写下一些设计模式的博客(咕咕咕...... ...

  10. Java工程师学习指南第8部分:分布式系统理论与实践

    本文整理了微信公众号[Java技术江湖]发表和转载过的分布式相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧. 细聊分布式ID生成方法 近期面试Java后端的一些感悟 本专栏介绍分布式的 ...