您好,登錄后才能下訂單哦!
本篇內容主要講解“java中try-with-resources的使用場景以及實際應用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java中try-with-resources的使用場景以及實際應用”吧!
try-with-resources
使用如下:/** * 將二進制文件讀取出來 * * @param filePath 文本絕對路徑 * @return * @throws FileNotFoundException * @throws IOException */ public static byte[] getReaderToBinary(String filePath) throws FileNotFoundException, IOException { int bufferSize = 4096; // 設置緩沖區大小 byte buffer[] = new byte[bufferSize]; // 緩沖區字節數組 File sourceFile = new File(filePath); byte[] b = null; try(InputStream fis = new FileInputStream(sourceFile); BufferedInputStream bis = new BufferedInputStream(fis, bufferSize); ) { int len = bis.available(); b = new byte[len]; bis.read(b, 0, len); } return b; }
上述例子參考地址:
* 作者:這個人太懶了 * 來源:CSDN * 原文:https://blog.csdn.net/qq_35546153/article/details/83421506 * 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
之前,采用try-catch-finally
,則較為繁瑣不直觀,甚至偶爾會忘記將其關閉,如下:
InputStream fis = null; BufferedInputStream bis = null; try{ fis = new FileInputStream(sourceFile); bis = new BufferedInputStream(fis, bufferSize); int len = bis.available(); b = new byte[len]; bis.read(b, 0, len); }finally { if(fis != null){ fis.close(); } if(bis != null){ bis.close(); } }
try-with-resources的用法就是,在try關鍵字的后面跟一個括號,把需要關閉的資源定義在括號內。在try塊執行完之后會自動的釋放掉資源。
但是必須注意,并不是所有的期望關閉的代碼都可以放進其中,只有實現了java.lang.AutoCloseable接口的類,才可以被自動關閉。
eg:上述代碼示例中的 InputStream
,其定義如下:
public abstract class InputStream implements Closeable
而 Closeable
,其定義如下(from jdk1.5版本):
/** * A {@code Closeable} is a source or destination of data that can be closed. * The close method is invoked to release resources that the object is * holding (such as open files). * * @since 1.5 */ public interface Closeable extends AutoCloseable
說明:
1、try-with-resource
語法是自 JDK7 新增的。
2、其只是一個語法糖:當你將上面代碼反編譯后會發現,其實對JVM虛擬機而言,它看到的依然是之前的try-catch-finally
寫法
場景以 打開了外部資源 居多:
文件
數據庫連接
網絡連接
等
若有自定義的需求:
public class CustomResource implements java.lang.AutoCloseable { @Override public void close() { System.out.printf("調用了[%s]的close方法\n", this.getClass().getName()); } public static void main(String[] args) { try (CustomResource customResource = new CustomResource();){ // do something System.out.println("do something"); throw new RuntimeException("測試拋出未知異常"); } } }
控制臺輸出如下:
do something Exception in thread "main" java.lang.RuntimeException: 測試拋出未知異常 at com.xxx.main(CustomResource.java:22) 調用了[com.xxx.CustomResource]的close方法
說明:即使try
塊中拋出異常,也不影響resource
的關閉
注意:
public class CustomResource implements java.lang.AutoCloseable { public CustomResource(){ throw new RuntimeException("構造器異常:"+ this.getClass().getName()); } @Override public void close() { System.out.printf("調用了[%s]的close方法\n", this.getClass().getName()); throw new RuntimeException("close方法異常:"+ this.getClass().getName()); } public static void main(String[] args) { try (CustomResource customResource = new CustomResource();){ // do something System.out.println("do something"); } catch (Exception e){ System.out.println("do catch"); e.printStackTrace(); } } }
控制臺輸出如下:
do catch java.lang.RuntimeException: 構造器異常:com.xxx.CustomResource at com.xxx.CustomResource.<init>(CustomResource.java:13) at com.xxx.CustomResource.main(CustomResource.java:24)
解釋說明(參考地址:https://www.cnblogs.com/itZhy/p/7636615.html):
try-with-resource時,如果對外部資源的處理和對外部資源的關閉均遭遇了異常,“關閉異常”將被抑制,“處理異常”將被拋出,但“關閉異常”并沒有丟失,而是存放在“處理異常”的被抑制的異常列表中。
到此,相信大家對“java中try-with-resources的使用場景以及實際應用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。