欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

為什么不使用try-catch-finally處理Java異常

本篇內(nèi)容主要講解“為什么不使用try-catch-finally處理Java異常”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“為什么不使用try-catch-finally處理Java異?!卑?

創(chuàng)新互聯(lián)主打移動網(wǎng)站、網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護、國際域名空間、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。

一、前言

在正式分析之前,我們先看一波finally的執(zhí)行順序。

1、finally不是必要條件

也就是說try-catch-finally中,可以只有try-catch,也可以只有try-finally。

2、假設(shè)基于try-catch-finally:

第一:代碼沒有異常

執(zhí)行順序:try執(zhí)行完整->catch不執(zhí)行->finally執(zhí)行

第二:代碼有異常且catch進行捕獲

執(zhí)行順序:try執(zhí)行部分->跳轉(zhuǎn)catch捕獲處理->finally執(zhí)行

第三:代碼有異常且catch不捕獲:這種情況沒有catch

執(zhí)行順序:try執(zhí)行部分->finally執(zhí)行

從上面的執(zhí)行順序可以看出,finally語句不管在哪種情況是一定會執(zhí)行的?;谶@個認識,現(xiàn)在我們再來分析。

二、try-finally的缺點

先看案例,本案例來自《Effective java》,現(xiàn)在要關(guān)閉資源:

static String firstLineOfFile(String path) throws IOException {          BufferedReader reader = new BufferedReader(new FileReader(path));          try {              return reader.readLine();          } finally {              reader.close();          }  }

關(guān)閉一個資源還好,但是如果再添加第二個資源,代碼看起來就會一團糟了。

static void copy(String src, String desc) throws IOException {          InputStream in = new FileInputStream(src);          try {              OutputStream out = new FileOutputStream(desc);              byte[] bytes = new byte[1024];              int n;              try {                  while ((n = in.read(bytes)) != -1) {                      out.write(bytes, 0, n);                  }              } finally {                  out.close();             }          } finally {              in.close();          }  }

如果需要關(guān)閉的資源不僅種類多,而且數(shù)量也很多。那代碼可就太龐大了?,F(xiàn)在對這種方式的缺點進行一波總結(jié):

1. 關(guān)閉的資源多事,代碼復(fù)雜

2. 對于第一個案例,如果設(shè)備出現(xiàn)異常,那么那么調(diào)用readLine就會拋出異常,同時close方法也出現(xiàn)異常,在這種情況下,close異常會完全抹去readLine異常。在異常堆棧軌跡中也完全沒有readLine異常的記錄。

現(xiàn)在來測試一邊:

為什么不使用try-catch-finally處理Java異常

基于以上原因,出現(xiàn)了try-with-resources。

三、try-with-resources的優(yōu)勢

try-with-resources是在jdk1.7引入的,可以完美解決以上的問題。要使用這個構(gòu)造的資源,必須先實現(xiàn)AutoCloseable接口,其中包含了單個返回void的close方法,Java類庫與第三方類庫中的許多類和接口,現(xiàn)在都實現(xiàn)或擴展了AutoCloseable接口,因此我們現(xiàn)在不必實現(xiàn)了。

既然try-with-resources能夠解決以上的問題,現(xiàn)在來看一下,如何解決的:

1、代碼復(fù)雜問題解決

static void copy(String src, String desc) throws IOException {          try (InputStream in = new FileInputStream(src);               OutputStream out = new FileOutputStream(desc)) {              byte[] bytes = new byte[1024];              int n;              while ((n = in.read(bytes)) != -1) {                  out.write(bytes, 0, n);              }          }  }

可以看出這種方式代碼更加簡單,出現(xiàn)了錯誤,也能快速定位。

2、異常抹去問題解決

static String firstLineOfFil  (String path) throws IOException {          try (BufferedReader reader = new BufferedReader(new FileReader(path))) {              return reader.readLine();          }  }

如果readLine和不可見的close方法都拋出異常,close方法拋出的異常就會被禁止,try-finally處理機制中我們無法看到,堆棧軌跡中也不能打印,但是try-with-resources不一樣,全部會被打印在堆棧軌跡中,并注明它們是被禁止的異常,通過編寫調(diào)用getSuppressed方法還可以訪問到它們?,F(xiàn)在再來測試一遍。

為什么不使用try-catch-finally處理Java異常

OK,上面基本上全部分析完畢,但是此書還給出了一個更好的案例:

static String firstLineOfFile(String path, String defaultVal) {          try (BufferedReader reader = new BufferedReader(new FileReader(path))) {              return reader.readLine();          } catch (IOException e) {              return defaultVal;          }  }

這個firstLineOfFile方法沒有拋出異常,但是如果它無法打開文件,或者無法從中讀取,就會返回一個默認值。

到此,相信大家對“為什么不使用try-catch-finally處理Java異?!庇辛烁畹牧私?,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前題目:為什么不使用try-catch-finally處理Java異常
網(wǎng)站網(wǎng)址:http://aaarwkj.com/article18/gghidp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊定制網(wǎng)站、靜態(tài)網(wǎng)站、搜索引擎優(yōu)化、標簽優(yōu)化、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
国产精品播放一区二区三区| 日日添夜夜躁欧美一区二区| 午夜福利日本一区二区| 在线观看国产精品女主播户外麻豆| av在线免费观看美日韩| 久久久久久国产精品亚洲| 四虎影院成人精品久久| 国产精品视频黄色一区| 中文字幕成人乱码亚洲| 日本欧美三级一二三区| 一级黄片电影中文字幕| 国产精品99久久久久久宅男九| 国产精品三级国产精品高| 日韩欧美中文字幕在线等| 黑丝美女被内射视频免费观看| 欧美日韩亚洲中文综合网 | 性色视频一区二区三区| 亚洲综合偷拍欧美一区色| 欧美久久精品在线观看| 在线观看男人的天堂av| 老湿机午夜在线免费观看| 亚洲视频精品一区二区三区| 午夜视频在线观看91| 国产一区精品在线免费看| 国产综合一区二区三区视频| 中午字幕人妻少妇久久| 国产欧美日韩综合激情| 国产三级精品三级在线专区1| 午夜在线观看成人av| 亚洲日本日本午夜精品| 美国一级二级三级黄片| 男女午夜激情四射视频| 在线观看精品日本一区二| 国产av剧情精品麻豆| 成年人国产免费在线观看| 免费看真人性生活视频| 欧美日韩天堂一区二区| 香蕉伊蕉伊中文在线视频| 国产精品推荐在线观看| 国产尹人99大香蕉| 国产一区欧美二区日韩三区|