Java中资源关闭的处理方式
生活随笔
收集整理的這篇文章主要介紹了
Java中资源关闭的处理方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文就關于IO資源的處理問題,提出三種方案。
- close()放在try塊中
- close()放在finally塊中
- 使用try-with-resource語句
close()放在try塊中
//close() is in try clause try {PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("out.txt", true)));out.println("the text");out.close(); } catch (IOException e) {e.printStackTrace(); }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
這種方式容易造成IO資源的泄露,因為對于IO資源來說不管操作的結果如何都必須關閉。
close()放在finally塊中
//close() is in finally clause PrintWriter out = null; try {out = new PrintWriter(new BufferedWriter(new FileWriter("out.txt", true)));out.println("the text"); } catch (IOException e) {e.printStackTrace(); } finally {if (out != null) {out.close();}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
這種方式在JDK1.7之前,推薦使用這種方式,但是,這種方式還是有問題,因為,在try塊和finally塊中可能都會發生Exception。
使用try-with-resource語句
//try-with-resource statement try (PrintWriter out2 = new PrintWriter(new BufferedWriter(new FileWriter("out.txt", true)))) {out2.println("the text"); } catch (IOException e) {e.printStackTrace(); }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
這種方式可能是最好的,Java官方推薦使用這種方式,但是,使用的前提是你的jdk版本在1.7以上。
總結
因為不管什么情況下(異常或者非異常)資源都必須關閉,在jdk1.6之前,應該把close()放在finally塊中,以確保資源的正確釋放。
如果使用jdk1.7以上的版本,推薦使用try-with-resources語句。
原文鏈接:should-close-be-put-in-finally-block-or-not
翻譯:crane-yuan
[ 轉載請保留原文出處、譯者和譯文鏈接。]
來源:https://blog.csdn.net/u014717036/article/details/52290219
總結
以上是生活随笔為你收集整理的Java中资源关闭的处理方式的全部內容,希望文章能夠幫你解決所遇到的問題。