jdk1.7新特性try(){}
最近在某群中看到有位朋友發了段程式碼
public void xxx(){
try(InputStream fis = new FileInputStream(source)){
byte[] buf = new byte[1024];
// 省略若干程式碼........
}
catch(BussineExpection e)
throw e;
}
疑問一:InputStream為何不在finally中關閉
疑問二:try()中的程式碼什麼意思
懷著這樣的疑問,我去調查了一些資料
知道了這是jdk7的新特性,名稱 try-with-resources 語句,
稱為 ARM 塊(Automatic Resource Management) ,自動資源管理。
新的語句支援包括流以及任何可關閉的資源。
資料流會在 try 執行完畢後自動被關閉,這樣,程式碼是不是優雅多了
前提是,這些可關閉的資源必須實現 java.lang.AutoCloseable 介面。
好了,這回我們在編寫關於檔案資源類的util工具類的時候
可以寫出非常優雅的程式碼的同時,也提升了我們程式設計師的逼格。
相關推薦
JDK1.7新特性--try-with-resources
簡介 try-with-resources語句是一個宣告一個或多個資源的try語句。 資源是一個物件,必須在程式完成後關閉它。 try-with-resources語句確保在語句結束時關閉每個資源。 實現java.lang.AutoCloseable的任何物件(包括實現java.io.C
jdk1.7新特性try(){}
最近在某群中看到有位朋友發了段程式碼 public void xxx(){ try(InputStream fis = new FileInputStream(source)){ byte[] buf = new byte[1024];
JDK1.7新特性(經過本人測試的結果)
網上有很多關於jdk版本的部落格, 我從中選取了一些進行了驗證,發現很多錯誤並作出了修改. 對集合類的語言支援; (經過will我的實踐,這是一個假訊息!) 自動資源管理; 改進的通用例項建立型別推斷; 數字字面量下劃線支援;&n
jdk1.5,jdk1.6,jdk1.7新特性
JDK1.5 1、靜態匯入 import Static java.lang.Math.max 2、可變引數:overload過載,override重寫,只能出現在引數列表的最後(...位於引數型別和引數名之間,) add(int x,int ... args){
JDK1.7新特性--自動關閉類
JDK在1.7之後出現了自動關閉類的功能,該功能的出現為各種關閉資源提供了相當大的幫助,這裡我們談一談自動關閉類。 JDK1.7之後出現了一個重要的介面,以及改造了一個重要的方法結構: 1、AutoCloseable自動關閉介面 2、try(){}--catch{}-
jdk1.8新特性 : 接口中可以有普通方法(非靜態方法)和靜態方法 , 顛覆了之前我的理解 : 接口中只能有共有常量和抽象方法的概念,後面必須要加一句jdk1.7和1..7之前
@override 編譯 sys 接口 blank new style nts highlight 看到jdk某些接口中存在default方法,於是... http://shaomeng95.iteye.com/blog/998820 為什麽接口只能是公有常量? p
jdk1.7/jdk1.8新特性
在面試中經常會問jdk1.6,jdk1.7,jdk1.8的區別: 最近面試的時候的面試官問我jdk8的新特性: 我回答了幾個,他提問到:為什麼defualt沒有被推廣,有什麼弊端。 我很蒙圈,在這裡新增下回答: 我目前還不知道 jdk1.7新增特性: 1.7新特性轉載 1 s
java 7新特性-TWR(Try-with-resources)
今天在資料上練習檔案拷貝程式時,遇到了java 7中的一個新特性TWR,可以減少實際中的部分程式碼書寫,對其做以記錄。 try-with-resources語句是聲明瞭一個或多個資源的try語句塊。在
MySQL5.7新特性——gtid基礎
mysql gtid 1、MySQL5.7 新特性:gtid復制①:GTID是什麽 是事務的ID,唯一識別號,全局唯一。 隨事務記錄到Binary Log中,用來標識事務。 每個事務有一個Gtid_log_event。 ②:GTID的構成 UUID + Sequence
mysql5.7新特性
mysql mysql5.7版本出來後還是有大量的修改以及一些調優,修復一些bug,刪掉了一些舊的參數,在這裏就簡單的整理一下 因為平時都是使用二進制包安裝mysql,所以這裏就以mysql的二進制包部署開始。首先,mysql的安裝初始化拋棄了舊版的mysql_install_db而使用mysqld
MySQL 5.7 新特性之增強半同步復制
art times -s gin com wrap nlog ash 所有 1. 背景介紹 半同步復制 普通的replication,即mysql的異步復制,依靠mysql二進制日誌也即binary log進行數據復制。比如兩臺機器,一臺主機(master),另外一臺是從機
mysql5.7新特性JSON數據類型解析
family rate fec efault idt ora 似的 create flow 廢話不多說,直接上實例。一、json結構創建測試表CREATE TABLE `article` ( `id` int(11) unsigned NOT NULL AUTO_INC
MySQL 5.7新特性之Generated Column(函數索引)
div 顯示 提高 mysql generate 更新 ide pan 數據庫 官網原文:https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html 註:以下是我參考官網文檔和結合自
jdk1.8新特性之接口default方法
sent arguments sel 可能 beyond lar iter none 裏的 眾所周知,default是java的關鍵字之一,使用場景是配合switch關鍵字用於條件分支的默認項。但自從java的jdk1.8橫空出世以後,它就被賦予了另一項很酷的能力——在
jdk1.8新特性之lambda表達式
rest 簡潔 cnblogs ensure 1.8 可能 finish main RF lambda表達式其實就是指一個匿名函數,應用最廣泛的就是匿名內部類。在jdk1.8之前,我們定義一個匿名內部類可能需要寫一大坨代碼,現在有了lambda之後,可以寫的很簡潔了。但
jdk1.8新特性應用之Iterable
accep sub 抽象 default describe dem generate using 操作 我們繼續看lambda表達式的應用: public void urlExcuAspect(RpcController controller, Message
Java基礎-----jdk1.5新特性(靜態匯入,增強for迴圈,列舉)
package cn.itcast.jdk15; /* Jdk1.5新特性之-----靜態匯入 靜態匯入的作用:簡化書寫。 靜態匯入可以作用於一個類的所有成員 靜態沒匯入的格式:
Java7 新特性: try-with-resources
Try-with-resources是java7中一個新的異常處理機制,它能夠很容易地關閉在try-catch語句塊中使用的資源。 利用Try-Catch-Finally管理資源(舊的程式碼風格)在java7以前,程式中使用的資源需要被明確地關閉,這個體驗有點繁瑣。 下面的方法讀取檔案,然後用System
[Unity指令碼執行時更新]C#7新特性
洪流學堂,讓你快人幾步!本文首發於洪流學堂微信公眾號。 本文是該系列《Unity指令碼執行時更新帶來了什麼?》的第5篇。 洪流學堂公眾號回覆runtime,獲取本系列所有文章。 Unity2017-2018.2中的4.x執行時已經支援到C#6,之前的文章已經介紹完畢
JDK1.6新特性
一、Desktop類和SystemTray類 在JDK6中,AWT新增加了兩個類:Desktop和SystemTray。 前者可以用來開啟系統預設瀏覽器瀏覽指定的URL,開啟系統預設郵件客戶端給指定的郵箱發郵件,用預設應用程式開啟或編輯檔案(比如,用記事本開啟以txt