JAVA中try
块的标准形式很通用,但有些常见的情况需要开发者小心编写catch
和finally
块。这些情况是清理或关闭不再需要使用的资源。
正常情况下,我们用try-catch-finally
语句来实现打开文件资源,最后再关闭清理文件资源。例如下面的代码:
public class test1 {
public static void main(String[] args) {
FileInputStream file = null;
try {
file = new FileInputStream(new File("demo.txt"));
/*
* 处理这个文件的操作
*/
} catch(IOException e){
e.printStackTrace();
} finally {
//关闭资源
if(file != null) {
try {
file.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
发现这种操作很繁琐,代码也很多,那有没有什么简便的方法呢?
就像python里面的with
语句一样呢
那么恭喜你,确实有!
Java(从第7版起)提供了一种机制,能自动关闭需要清理的资源——处理资源的try
语句(try-with-resources, TWR)
。
下面简单展示如何使用FileInputStream类打开文件(得到的对象需要处理)来介绍语法:
public class test1 {
public static void main(String[] args) {
try(InputStream is = new FileInputStream("demo.txt")){
/*
* 处理这个文件的操作
*/
}catch (IOException e) {
//这里处理FileNoFoundExceotion等异常
e.printStackTrace();
}
}
}
发现这种新型的方法,去掉了finally块,而且不需要编写catch块。
这种新型try
语句的参数都是需要清理的对象。这些对象(严格来说,这些对象必须实现AutoCloseable接口
)的作用域在try
块中(也就是把要释放的资源写在 try 后的()中)
,不管 try
块以何种方式退出,都会自动清理。开发者无需编写任何catch
或finally
块,Java编译器会自动插入正确的清理代码。
因此,我建议所有处理资源的新代码都应该使用TWR
形式编写,因为这种形式比自己手动编写catch
块更少出错,而且不会遇到麻烦的技术问题,例如终结机制
。
好了现在的Java:
注:表情来源于网络:侵权删