javaIO——AutoCloseable 小试
前面在 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 小试的更多相关文章
- javaIO——概述
以前看java书,都将IO作为一个大的章节甚至模块来编写,可见IO在java语言中的重要性. java的流按功能和处理的目标数据不同可以分为字节流和字符流.字符流处理的基本数据单元是字符:字节流处理的 ...
- Java基础 Java-IO流 深入浅出
建议阅读 重要性由高到低 Java基础-3 吃透Java IO:字节流.字符流.缓冲流 廖雪峰Java IO Java-IO流 JAVA设计模式初探之装饰者模式 为什么我觉得 Java 的 IO 很复 ...
- 小试ASP.NET MVC——一个邀请页面的实现
上篇博客我们大体介绍了ASP.NET MVC以及如何去新建项目,这篇博客我们讲点干货.小试ASP.NET MVC,我们来写一个简单的邀请WEB. 先来建立一个Models,叫GuestResponse ...
- JavaIO学习笔记(五)
JavaIO前期准备 什么是同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 什么是异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO ...
- java IO之AutoCloseable,Closeable和Flushable接口
有3个接口对于流类相当重要.其中两个接口是Closeable和Flushable,它们是在java.io包中定义的,并且是由JDK5添加的.第3个接口是AutoColseable,它是由JDK7添加的 ...
- javaIO系统----再看装饰者模式
javaIO系统拥有各种各样的类,尤其是每次要进行读写操作时,总会一层套一层的new,以前不明白为什么要这样做,不过学习了适配器模式后,对于这种做法立刻了解了:动态扩展IO的功能,使之符合使用者的习惯 ...
- Java学习日记之 Java-IO流
Java中的IO流在处理上分为字节流和字符流.字节流和字符流的区别 : 1.字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8 ...
- canvas游戏小试:画一个按方向键移动的圆点
canvas游戏小试:画一个按方向键移动的圆点 自己对canvas,但又有一颗做游戏的心TT.然后记录一下对canvas的学习吧,用一个按方向键控制的小圆点来做练习.(编程时用了一些es6的语法) ...
- javaIO框架小析
IO即数据读写.数据是应用的中心要素,而数据读写的能力和可扩展性是编程平台的基础支撑. 概念框架 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : ...
随机推荐
- Flume-数据流监控 Ganglia
Ganglia 由 gmond.gmetad 和 gweb 三部分组成. gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要收集指标数据的节点主机上.使用 ...
- js和微信小程序本地获取东八北京时间
changeCount(){ // 目标时区,东8区 const targetTimezone = -8; // 当前时区与中时区时差,以min为维度 const dif = new Date().g ...
- Objective-C中的self与LLVM Clang新引入的instancetype
我们知道,大部分面向对象语言对于一个类的成员方法都有一个隐含的参数.在C++.Java.C#和JavaScript中是this,而在Objective-C中则是self.当然,由于Objective- ...
- 将springboot安装成windows服务启动。
下载Windows Service Wrapper 本文下载了winsw-2.3.0-bin.exe. 新建一个目录aiplatformService 在目录里面新建一个aiplatformServi ...
- python 内置数据结构 切片
切片 通过索引区间访问线性结构的一段数据 sequence[start:stop] 表示返回[start,stop]区间的子序列 支持负索引 start为0,可以省略 stop为末尾,可以省略 超过上 ...
- gitlab配置webhook报错解决
https://blog.csdn.net/xukangkang1hao/article/details/80756085 gitlab使用webhook向jenkins发送请求,报错 Request ...
- ES6 javascript 实用开发方法技巧分享
定义变量/常量 ES6 中新增加了 let 和 const 两个命令,let 用于定义变量,const 用于定义常量 两个命令与原有的 var 命令所不同的地方在于,let, const 都是块级作用 ...
- 【SQL】在数据库中发起http请求的小改进
市面上常见的是用MSXML2.ServerXMLHTTP这个类,但这个类在发起异步请求时并不可靠,就是当send后并不一定会发出这个请求.这里推荐改用Microsoft.XMLHTTP,如果只是简单的 ...
- CentOS 7安装gevent
CentOS 7安装gevent 首先确认python版本不低于python 2.7 执行python –V(或者python -vision) 安装pip工具 方式一: [root@server-0 ...
- imregionalmax imregionalmin imextendedmax imextendedmin imhmax imhmin 函数的详解 matlab中函数
BW = imregionalmax(I): 该函数获得灰度图像 I 的局部极大值,返回值BW为和原图像大小相同的二值图像,BW中元素1对应极大值,其他元素为0 BW = imregionalmax( ...