亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中try-with-resources的使用場景以及實際應用

發布時間:2021-07-05 18:40:52 來源:億速云 閱讀:179 作者:chen 欄目:大數據

本篇內容主要講解“java中try-with-resources的使用場景以及實際應用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java中try-with-resources的使用場景以及實際應用”吧!

1、開篇,實際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();
            }
        }

2、使用場景

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寫法

3、實際使用

場景以 打開了外部資源 居多:

  • 文件

  • 數據庫連接

  • 網絡連接

若有自定義的需求:

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的關閉

4、其他要點

注意:

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的使用場景以及實際應用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

靖宇县| 西乡县| 即墨市| 姜堰市| 江川县| 什邡市| 通城县| 延边| 潮州市| 天镇县| 福安市| 平遥县| 宁乡县| 原平市| 武城县| 北碚区| 岳池县| 清远市| 淅川县| 曲阜市| 荔波县| 海丰县| 郸城县| 无为县| 乌拉特前旗| 延长县| 青神县| 敦化市| 治多县| 武定县| 潜山县| 定西市| 永新县| 庆阳市| 康平县| 正安县| 邯郸县| 浦县| 民乐县| 江都市| 惠来县|