日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 7中的Try-with-resources

發布時間:2025/3/21 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 7中的Try-with-resources 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接?作者:Jakob Jenkov 譯者:fangqiang08(fangqiang08@gmail.com)
Try-with-resources是java7中一個新的異常處理機制,它能夠很容易地關閉在try-catch語句塊中使用的資源。

利用Try-Catch-Finally管理資源(舊的代碼風格)

在java7以前,程序中使用的資源需要被明確地關閉,這個體驗有點繁瑣。

下面的方法讀取文件,然后用System.out打印:

01private?static?void?printFile()?throws?IOException {
02????InputStream input =?null;
03?
04????try?{
05????????input = <strong>new?FileInputStream("file.txt")</strong>;
06?
07????????int?data = <strong>input.read()</strong>;
08????????while(data != -1){
09????????????System.out.print((char) data);
10????????????data = <strong>input.read()</strong>;
11????????}
12????}?finally?{
13????????if(input !=?null){
14????????????<strong>input.close()</strong>;
15????????}
16????}
17}

上面代碼中黑體字的程序可能會拋出異常。正如你所看到的,try語句塊中有3個地方能拋出異常,finally語句塊中有一個地方會能出異常。

不論try語句塊中是否有異常拋出,finally語句塊始終會被執行。這意味著,不論try語句塊中發生什么,InputStream 都會被關閉,或者說都會試圖被關閉。如果關閉失敗,InputStream’s close()方法也可能會拋出異常。

假設try語句塊拋出一個異常,然后finally語句塊被執行。同樣假設finally語句塊也拋出了一個異常。那么哪個異常會根據調用棧往外傳播?

即使try語句塊中拋出的異常與異常傳播更相關,最終還是finally語句塊中拋出的異常會根據調用棧向外傳播。

在java7中,對于上面的例子可以用try-with-resource 結構這樣寫:

01private?static?void?printFileJava7()?throws?IOException {
02?
03????try(FileInputStream input =?new?FileInputStream("file.txt")) {
04?
05????????int?data = input.read();
06????????while(data != -1){
07????????????System.out.print((char) data);
08????????????data = input.read();
09????????}
10????}
11}

注意方法中的第一行:

1try(FileInputStream input =?new?FileInputStream("file.txt")) {

這就是try-with-resource 結構的用法。FileInputStream 類型變量就在try關鍵字后面的括號中聲明。而且一個FileInputStream 類型被實例化并被賦給了這個變量。

當try語句塊運行結束時,FileInputStream 會被自動關閉。這是因為FileInputStream 實現了java中的java.lang.AutoCloseable接口。所有實現了這個接口的類都可以在try-with-resources結構中使用。

當try-with-resources結構中拋出一個異常,同時FileInputStreami被關閉時(調用了其close方法)也拋出一個異常,try-with-resources結構中拋出的異常會向外傳播,而FileInputStreami被關閉時拋出的異常被抑制了。這與文章開始處利用舊風格代碼的例子(在finally語句塊中關閉資源)相反。

使用多個資源

你可以在塊中使用多個資源而且這些資源都能被自動地關閉。下面是例子:

01private?static?void?printFileJava7()?throws?IOException {
02?
03????try(? FileInputStream???? input???????? =?new?FileInputStream("file.txt");
04??????????BufferedInputStream bufferedInput =?new?BufferedInputStream(input)
05????) {
06?
07????????int?data = bufferedInput.read();
08????????while(data != -1){
09????????????System.out.print((char) data);
10????data = bufferedInput.read();
11????????}
12????}
13}

上面的例子在try關鍵字后的括號里創建了兩個資源——FileInputStream 和BufferedInputStream。當程序運行離開try語句塊時,這兩個資源都會被自動關閉。

這些資源將按照他們被創建順序的逆序來關閉。首先BufferedInputStream 會被關閉,然后FileInputStream會被關閉。

自定義AutoClosable 實現

這個try-with-resources結構里不僅能夠操作java內置的類。你也可以在自己的類中實現java.lang.AutoCloseable接口,然后在try-with-resources結構里使用這個類。

AutoClosable 接口僅僅有一個方法,接口定義如下:

1public?interface?AutoClosable {
2?
3????public?void?close()?throws?Exception;
4}

任何實現了這個接口的方法都可以在try-with-resources結構中使用。下面是一個簡單的例子:

01public?class?MyAutoClosable?implements?AutoCloseable {
02?
03????public?void?doIt() {
04????????System.out.println("MyAutoClosable doing it!");
05????}
06?
07????@Override
08????public?void?close()?throws?Exception {
09????????System.out.println("MyAutoClosable closed!");
10????}
11}

doIt()是方法不是AutoClosable 接口中的一部分,之所以實現這個方法是因為我們想要這個類除了關閉方法外還能做點其他事。

下面是MyAutoClosable 在try-with-resources結構中使用的例子:

1private?static?void?myAutoClosable()?throws?Exception {
2?
3????try(MyAutoClosable myAutoClosable =?new?MyAutoClosable()){
4????????myAutoClosable.doIt();
5????}
6}

當方法myAutoClosable.doIt()被調用時,下面是打印到System.out的輸出:

1MyAutoClosable doing it!
2MyAutoClosable closed!

通過上面這些你可以看到,不論try-catch中使用的資源是自己創造的還是java內置的類型,try-with-resources都是一個能夠確保資源能被正確地關閉的強大方法。

原創文章,轉載請注明:?轉載自并發編程網 – ifeve.com本文鏈接地址:?Java 7中的Try-with-resources

總結

以上是生活随笔為你收集整理的Java 7中的Try-with-resources的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天撸一撸 | 亚洲美女网站 | 成人动漫在线观看视频 | 日韩爱爱网站 | 久草黄色| 中文字幕三级视频 | 人人看人人爱 | 成人自拍视频在线 | 欧美顶级毛片在线播放 | 艳母日本动漫在线观看 | 我们俩电影网mp4动漫官网 | 久久影院视频 | 婷婷久久综合网 | 天天操天天摸天天干 | 99国产精品久久久久 | 久久国产精品一区 | 亚洲综合图色40p | 国产一级二级在线观看 | 亚洲精品人妻av | 亚洲性网站 | 欧美被狂躁喷白浆精品 | 日本xx视频 | 综合欧美亚洲 | 久久久亚洲一区二区三区 | 国产一区网| 亚洲av色一区二区三区精品 | 久久精品资源 | 欧美大片免费在线观看 | 色呦呦视频在线 | 成人做爰视频www网站小优视频 | 瑟瑟综合网 | 就操成人网| 一级生活毛片 | 麻豆蜜桃91 | 欧美性受视频 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 日韩中文字幕在线播放 | 国产伦理吴梦梦伦理 | 午夜av免费 | 亚洲码无人客一区二区三区 | 69视频在线| 日韩亚洲一区二区 | 日本一区二区在线观看视频 | 国产资源av | 久久青草免费视频 | 欧美一区二区三区久久成人精品 | 713电影免费播放国语 | 久久亚洲精品中文字幕 | 欧洲亚洲视频 | 欧美经典一区二区三区 | 中文区中文字幕免费看 | 日本a天堂 | 欧美一区二区在线视频观看 | 毛片999| 久久艹影院 | 日本一区二区在线免费观看 | 乱lun合集小可的奶水 | 懂色av蜜臀av粉嫩av分享吧 | 欧美高清在线一区 | 黄色三级网站在线观看 | 在线看欧美 | 亚洲天堂区 | 青青青国产 | 精品人妻在线视频 | 日本精品网站 | 男女日日 | 成人在线观看免费视频 | 日本bdsm视频 | 一区二区三区免费在线观看 | 99久久国产宗和精品1上映 | 九色在线视频 | 人妻体内射精一区二区三区 | 操极品美女 | 国产第三页 | 国产一二三级 | 一级影片在线观看 | 成人一级生活片 | 欧美搞逼视频 | 天天操天天透 | 欧美视频第一区 | 免费超碰在线 | 黄网视频在线观看 | 久草手机在线观看 | 无码毛片aaa在线 | av在线影视| 欧美精品亚洲精品 | 超碰人人人人人人人 | 曰本丰满熟妇xxxx性 | 国产精品亚洲一区二区三区在线观看 | 人人草人人 | 黑人性视频 | 精品国精品国产 | 18在线观看免费入口 | 在线中文视频 | 无码人妻少妇伦在线电影 | 97色综合 | 国产精品久久久久久久毛片 | 91精品国产一区二区无码 | 尤果网福利视频在线观看 |