乐趣区

java7与java9中的tryfinally关闭资源

1.java7 中的 try

在 java7 之前, 对于一些需要使用 finally 关闭资源的操作, 会显得很臃肿.

try
{//}
catch(Exception e)
{//}
finally
{if(xxxx != null)
    {xxxx.close();
    }
}

在 java7 中引入了可以在 try 中直接声明需要关闭的资源的功能, 在 try 后的圆括号直接定义一个或多个资源即可.

try(var xxx = new xxx();
    var xxx = new xxx();)
{//}

但是这些类都需要实现了 Closeable 或 AutoCloseable 接口, 实现其中的 close().

2.Closeable 接口

Closeable 接口是 AutoCloseable 的子接口, 其中的 close() 抛出了 IOException 异常, 实现接口时要注意抛出的异常需是 IOException 异常或 IOException 子类异常.

3.AutoCloseable 接口

AutoCloseable 接口中的 close() 抛出的异常是 Exception, 实现接口时可以抛出任何类型的异常.

java7 几乎把所有的 ” 资源类 ”(包括文件 IO 的各种类,JDBC 编程的 Connection,Statement 等接口) 进行了改写, 改写后的资源都实现了 AutoCloseable 或 Closeable 接口.(引自 << 疯狂 Java 讲义 >>( 第 5 版) P381)

4.java9 中的 try

java9 不像 java7 一样在 try 中定义资源, 只需要自动关闭的资源有 final 修饰即可. 也就是说, 可以不在 try 中声明, 在 try 前声明且使用 final 修饰即可.

final var xxx = new xxx();
final var xxx = new xxx();
try(xxx;xxx)
{//}

这是作者的 CSDN 博客地址

一起学习, 一起成长.

退出移动版