Java7,AutoClosable
Java 7的try-with-resource语法的目的是提高Java开发人员的效率,使得他们不需要在编写代码时考虑资源释放问题,大多数的这类"清理"问题是由于异常发生时清理方法没有被调用产生。
准备
- 3个异常:
- OpenDoor类
构造函数会抛出OpenException,swing()方法会抛出SwingException,close方法会抛出CloseException。
}
}
- 可执行的TryWithResources类
);
}
}
}
运行上面的代码,如果没有抛出异常的话,输出应该是这样的:
三个异常目前被注释掉了,现在让我们一个个的抛出他们。
开始
- 在'try-with-resource'初始化代码块的异常(构造函数抛出)
如果OpenDoor的构造函数抛出异常时会发生什么?close()方法是否还会被自动调用?让我们来试一下就知道了,去掉构造函数中异常代码的注释:
OpenException();
}
代码打印的结果如下:
可以看到,当构造函数抛出异常时try-with-resource代码体部分的代码没有被执行。当声明资源时,如果有异常抛出,可以认为资源并未正确初始化,所以并需要释放资源。然而,需要注意的时,如果其他资源已被正确初始化,那么还是会按照声明相反的顺序调用那些资源的close()方法。
- try-with-resource代码块中抛出的异常
如果在swing方法中抛出异常,会发生什么呢?
从上面的输出我们可以了解到:
- OpenDoor的构造方法被调用了,第一行输出
- OpenDoor的swing方法也被调用了,第二行输出
- 抛出了
SwingException
- close方法被调用,第四行输出
- 异常被catch块捕获,第五行输出
- 执行finally代码块,地六行输出。
只是try-with-resources代码块的标准行为,尽管会使人很困惑:什么时候会执行close方法?规则是:任何AutoCloseable对象的close方法会在任何catch块代码之前被执行。
- 在AutoCloseable对象的close方法中抛出异常
The door is open.
The door is becoming unhinged.
The door is closed.
Is there a draft? class CloseException
I'm putting a sweater on, regardless.
我是天王盖地虎的分割线
参考:http://www.4byte.cn/learning/84919/java-7-xin-te-xing-zi-dong-zi-yuan-guan-li-arm-he-autoclosable-jie-kou-jiao-cheng.html
Java7,AutoClosable的更多相关文章
- Java7 新特性: try-with-resources
Try-with-resources是java7中一个新的异常处理机制,它能够很容易地关闭在try-catch语句块中使用的资源. 利用Try-Catch-Finally管理资源(旧的代码风格)在ja ...
- java7笔记
1 switch case 增加字符串类型,原理根据字符串hashcode以及string.equal比较2 数值字面量改进 新增二进制数值字面量 0b000004,在数值中间新增下划线方便阅读200 ...
- Java7并发编程实战(一) 守护线程的创建和运行
Java里有一种特殊的线程叫做守护(Daemon)线程,这种线程的优先级很低,通常来说,当一个应用程序里面没有其他线程运行的时候,守护线程才运行,当线程是程序中唯一运行的线程时,守护线程执行结束后,J ...
- Java7的异常处理新特性-addSuppressed()方法等
开发人员对异常处理的try-catch-finally语句块都比较熟悉.如果在try语句块中抛出了异常,在控制权转移到调用栈上一层代码之前,finally语句块中的语句也会执行.但是finally语句 ...
- JAVA7遍历文件夹
在JAVA7中提供了新的遍历文件的方法,比原有File类的递归遍历效率要好大约30%左右. 测试结果: 测试用的File类的递归,是经过对比测试几种方法,找出相对效率较好的来和JAVA7进行测试. 1 ...
- Java5、Java6、Java7的新特性
Java5 Java 5添加了8个语言特性:泛型,类型安全枚举,注解,自动装箱和拆箱,增强的循环,静态导入,可变参数,协变返回类型. 1.泛型 Generics: 引用泛型之后,允许指定集合里元素的类 ...
- java5、java6、java7、java8的新特性
Java5: 1.泛型 Generics: 引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处. Parameterized Type作为参数 ...
- 《Java7中 下划线的新特性》
//Java7引入了一个新功能:程序员可以在数值中使用下画线,不管是 //整形数值,还是浮点型数值,都可以自由地使用下划线.通过下划线 //分隔,可以更直观的分辨数值中到底有多少位. public c ...
- java7新特性 java8新特性
Java 7 的7个新特性 Java7语法新特性 JAVA8 十大新特性详解 http://www.jb51.net/article/48304.htm
随机推荐
- Wingdings 2 符号编码对照表
http://blog.csdn.net/linux7985/article/details/5030754 符号 编码 HTML 代码 符号 编码 HTML 代码 ! ! " &q ...
- POJ 2546 & ZOJ 1597 Circular Area(求两圆相交的面积 模板)
题目链接: POJ:http://poj.org/problem? id=2546 ZOJ:problemId=597" target="_blank">http: ...
- DMA : Timer Trigger Memory-to-memory mode,
The DMA channels can also work without being triggered by a request from a peripheral. This mode is ...
- [Go] ok 判断 汇总
1.判断 类型 类似于 JavaScript 中 typeof 和 Java 中 instanceof var a interface{} newA, ok := a.(string) // 如果 o ...
- ORA-00600: [kck_rls_check must use (11,0,0,0,0) or lower] 故障解决
一朋友在QQ上问我,说他数据库的pfile 和spfile 都不见了.我问他数据库是10g还是11g的,他说11g,所以我就让他用这个语法来创建spfile了: SQL> create spfi ...
- delphi 处理缩放图像
procedure TTMEImageDeviceIdentifyFrom.DrawText(AImage : TImage; AFile: string);var I: Integer; iWidt ...
- 深入System.Web.Caching命名空间 教你Hold住缓存管理
一,System .Web.Caching与缓存工作机制简介 System.Web.Caching是用来管理缓存的命名空间,其父级空间是System.Web,由此可见,缓存通常用于Web网站的开发,包 ...
- Python可视化库
转自小小蒲公英原文用Python可视化库 现如今大数据已人尽皆知,但在这个信息大爆炸的时代里,空有海量数据是无实际使用价值,更不要说帮助管理者进行业务决策.那么数据有什么价值呢?用什么样的手段才能把数 ...
- 简述 IOS中的LazyLoad思想
Lazy,谁懒?当然是计算机偷懒.通常用法,你有一个NSArray的property,但是你不在初始化方法里为其alloc/init,它就只是一个指针,不会占用内存.然后你写了此property的访问 ...
- 【docker】docker部署spring boot服务 选择配置文件启动
默认启动命令: docker run --name swapping -itd --net=host -v /etc/localtime:/etc/localtime:ro -v /etc/timez ...