JDK7之try-with-resources异常处理
来源:互联网 发布:淘宝宝贝详情图片宽度 编辑:程序博客网 时间:2024/06/04 00:30
异常
finally
finally
块是可选项。异常的产生往往会中断应用程序的执行,而在异常产生钱,可能有些资源未被释放。有时无论程序是否发生异常,都要执行一段代码,这时就可以通过finally块实现。无论异常产生与否finally
块都会被执行。即使是使用了return
语句,finally
块也要被执行,除非catch
块中调用了System.exit
方法终止了程序的运行。
try-with-resources 语句
Java程序中经常需要创建一些对象(I/O流、数据库连接),这些对象在使用完后需要关闭。忘记关闭文件可能导致内存泄露,并引起其他问题。在JDK7之前,通常使用finally
语句来确保一定会调用close
方法。
try { // 打开资源} catch(Exception e) { // TODO} finally { // 关闭资源}
如果在调用close
方法也可能抛出异常,那么也要处理这种异常。这样编写的程序代码会变得冗长。例如,下面是打开一个数据库连接的典型代码:
Connection connection = nunll;try { // 创建连接对象并执行操作} catch(Exception e) { // TODO} finally { if (connection != null) { try { connection.close(); } catch(SQLException e1) { // TODO } }}
可以看到,为了关闭连接资源要在finally
块中写这些代码,如果在一个try
块中打开多个资源,代码会更加的长。JDK7
提供的自动关闭资源的功能为管理资源(如文件流、数据库连接等)提供了一种更加简便的方式。这种功能是通过一种新的try
语句实现的,叫try-with-resources
,有时称为自动资源管理。try-with-resources
的主要好处是可以避免在资源(如文件流)不需要的时候忘记将其关闭。
try(resource-specification) { // 使用资源}
这里,resources-specification是声明并初始化资源(如文件)的语句,包含变量声明,用被管理对象的引用初始化该变量。这里可以创建多个资源,用分好分隔即可。当try
块结束时,资源会自动释放。如果是文件,文件将被关闭,因此不需要显式调用close方法。try-with-resources
语句也可以不包含catch语句和finally语句。
并非所有的资源都可以自动关闭。只有实现了java.lang.AutoCloseable
接口的那些资源才可以自动关闭。该接口是JDK7新增的,定义了close方法。java.io.Closeable
接口继承了AutoCloseable
接口。这两个接口被所有的流类实现,包括FileInputStream
和FileOutputStream
。因此,在使用流(文件流)时,可以使用try-with-resources
语句。
演示程序
package com.company.Review;public class TryWithResources { public static void main(String[] args) { try ( Door door = new Door(); Window window = new Window() ) { door.open(); window.open(); } catch (Exception e) { System.out.println("这是一个有趣的异常!"); } finally { System.out.println("\n\n\t×××××演示程序到此结束×××××"); System.out.println("\t\t门和窗户都被关闭了"); } }}class Door implements AutoCloseable { public Door() { System.out.println("创建门完成!"); } public void open() throws Exception { System.out.println("门已经被打开了,(⊙o⊙)…"); // 模拟发生异常 throw new Exception(); } @Override public void close() throws Exception { System.out.println("门已经被关闭了,O(∩_∩)O哈哈~"); }}class Window implements AutoCloseable { public Window() { System.out.println("创建窗户完成!"); } public void open() throws Exception { System.out.println("窗户已经被打开了,(*@ο@*) 哇~"); // 模拟发生异常 throw new Exception(); } @Override public void close() throws Exception { System.out.println("窗户已经被关闭了,;-)"); }}
结果如下:
创建门完成!创建窗户完成!门已经被打开了,(⊙o⊙)…窗户已经被关闭了,;-)门已经被关闭了,O(∩_∩)O哈哈~这是一个有趣的异常! ×××××演示程序到此结束××××× 门和窗户都被关闭了
- JDK7之try-with-resources异常处理
- JDK7之Try-with-resources
- 异常处理机制——try-with-resources
- JDK7新特性 try-with-resources 详细分析
- java新特性之try-with-resources
- Java7之try-with-resources语句
- JDK1.7新特性之try-with-resources和catch多种异常
- try-with-resources 语句
- try-with-resources语句
- try-with-resources语句
- try-with-resources
- Try-with-resources (TWR)
- try-with-resources 简介
- try-with-resources详解
- java7 [try-with-resources]
- 异常处理try/raise/assert/with
- java7新特性之Try-with-resources statement
- Java SE7新特性之try-with-resources语句
- Java中Class类详解、用法及泛化
- Java 自定义的JTable
- 小团队如何运营一款棋牌游戏
- java实现蓝桥回型取数
- C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)
- JDK7之try-with-resources异常处理
- [Notice] 我的新博客 ryuzhihao.cc(CSDN也会更新)
- 数据结构实验之排序六:希尔排序
- 最大公因数
- 总结(12.11-12.21)
- Java swing实现的俄罗斯方块小游戏源码
- 删除工程中的.svn文件
- 手机连接设备的蓝牙向其发送子服务器局域网IP信息,从而esp8266与该服务器建立tcp连接
- ros打开笔记本摄像头,单目标定