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

歡迎訪問 生活随笔!

生活随笔

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

java

Java:如何正确地使用异常详解

發布時間:2025/3/20 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java:如何正确地使用异常详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述:

? Java中的異常機制是一個好東西。不過好東西也要正確地使用才行,不然就會讓我們錯誤地認識它。在錯誤地認識狀況下,就會錯誤地使用。這樣就成了一個惡性地循環了。這不是我們愿意看到的。不要以為我們已經可以很好地使用異常了,下面就針對部分問題作一個講解。這部分的問題中,有一些是來自《Effective Java》這本書中,有一部分是來自本人平時開發過程中遇到的。


本文鏈接:http://blog.csdn.net/lemon_tree12138/article/details/50474230 -- Coding-Naga
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?--轉載請注明出處

1.是throw還是try-catch

? 這個是一個對剛接觸編程開發的人來說,經常面臨但又選擇不好的問題。

? 由于我們開發的項目可不是像寫Demo一樣輕松,這里可能會有很多層次結構。我們要在具體哪一層的什么位置是使用try-catch這個異常呢,還是把異常throw到上一層呢?這里,我們首先要知道一件事,那就是try-catch和throw分別會發生什么情況呢?

try-catch: 捕獲一個異常情況,并中止try塊中的后續操作。且不會再向上拋出異常了。

throw: 當使用throw拋出一個異常時,當前的執行塊(方法)會結束后續的執行。相當于一個return操作,并保證了上層在調用的時候可以捕獲到這個異常,并做相應處理。

Demo示例如下:

public class ExceptionClient {public static void main(String[] args) {ExceptionClient client = new ExceptionClient();client.showInfo();}private void showInfo() {try {System.out.println("first info");testException();System.out.println("second info");} catch (Exception e) {System.err.println(e);}System.out.println("outside info");}private void testException() throws AException {boolean f = true;if (f) {throw new AException("AException");}System.out.println("f is false.");} } ? 按照上面對try-catch和throw的分析,可以知道,showInfo方法try塊中的第二句話是不打印的,而testException方法的最后一句也是不打印的。結果如下:

圖-1 try-catch測試結果

2.是使用受檢的異常還是非受檢的異常

? 首先我們要了解什么是受檢異常和非受檢異常,不過這里顧名思義,受檢即接受檢查。由于目前的IDE很是智能,當我們在使用受檢異常而未try-catch這個異常時,IDE會給出錯誤提示。如下:


圖-2 IDE對受檢異常的檢查

? 而非受檢異常則不會被IDE識別。還有一點,因為前面說到IDE會檢測到受檢異常,所以,這里如果我們強行運行此代碼,是通不過編譯的,非受檢異常則不會。

? 好了,說明了受檢異常和非受檢異常在使用過程中的區別。現在就來說說怎么創建這些不同的異常吧。

? 當我們要編寫自定義的受檢異常A.java時,A的class需要繼承Exception,而非受檢異常B.java則是繼承RuntimeException

? 由于受檢異常會在使用的過程,強行限制開發人員去try-catch。而在try-catch此異常的時候,開發人員則可以對此異常進行修正并重新之前的操作(即恢復)。在RuntimeException中則沒有這樣的限制。所以,當我們試圖告訴調用者,當前的異常是可以被修復,并允許重新去調用的時候,我們就使用受檢的異常,當我們認為這是一個程序錯誤的時候,則需要使用非受檢異常。

? 可能對在何時使用受檢異常或非受檢異常有了一些基本認識,然后你可能會問這樣的一個問題:我們不是還有一個Error么,那么錯誤(Error)和異常有什么區別呢?下面就列舉了這兩者之間的區別(點擊查看參考來源):

Exception:
1.可以是可被控制(checked) 或不可控制的(unchecked)。
2.表示一個由程序員導致的錯誤。
3.應該在應用程序級被處理。
Error:
1.總是不可控制的(unchecked)。
2.經常用來用于表示系統錯誤或低層資源的錯誤。
3.如何可能的話,應該在系統級被捕捉。


3.只針對不正確的條件才使用異常

? 關于這一點,首先我們應該了解的是Java在進行異常檢查時消耗的系統資源,要比普通的程序調用高。那么,如果我們的程序在不停地進行異常檢查,就會對程序整個的性能產生不小的影響。我們可以從一個小例子中看出這一點。如下:

假設現有10000000個元素的List,我們要對此List進行遍歷,有三種方式,分別如下:

第一種:對每一種情況進行異常檢查

private void call_1(List<Integer> list) {long t = System.currentTimeMillis();try {int index = 0;while(true) {list.get(index++);} } catch (IndexOutOfBoundsException e) {LogUtils.printTimeUsed("不針對檢查異常", t);}}

第二種:只對錯誤的情況進行異常檢查

private void call_2(List<Integer> list) {long t = System.currentTimeMillis();t = System.currentTimeMillis();int size = list.size();int index = 0;while(true) {if (index >= size) {try {list.get(index++);} catch (IndexOutOfBoundsException e) {LogUtils.printTimeUsed("針對性檢查異常", t);break;}}list.get(index++);}}

第三種:普通的循環遍歷

private void call_3(List<Integer> list) {long t = System.currentTimeMillis();t = System.currentTimeMillis();int size = list.size();int index = 0;for (index = 0; index < size; index++) {list.get(index++);}LogUtils.printTimeUsed("循環遍歷", t);}

測試結果:


圖-3 不同異常檢查方式遍歷List

? 從上面的測試結果中,我們可以看到不針對地檢查異常(盲目地檢查異常),比有針對性地檢查異常性能上低了不少。所以,我們在使用異常的時候,請格外謹慎。需要去避免一些不必要的異常檢查,以優化我們的程序代碼。


Ref:

Effective?Java

總結

以上是生活随笔為你收集整理的Java:如何正确地使用异常详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 狠狠操在线播放 | 69堂精品 | 亚洲一区视频在线 | 三上悠亚久久精品 | 手机在线小视频 | 亚洲中文字幕视频一区 | 日本不卡一区二区三区视频 | 国产精品一二三区在线观看 | 制服丝袜亚洲 | 日日干综合 | 97se视频| 久久久综合网 | 已满18岁免费观看电视连续剧 | 欧美大黑b | 日韩av在线看免费观看 | 日本一区二区三区视频免费看 | 午夜精品久久久久久久无码 | 超碰pron| 国产国产乱老熟女视频网站97 | 亚洲日本免费 | 总受合集lunjian双性h | 丰满岳乱妇国产精品一区 | 91热热| 色五五月| 91精品国产入口在线 | 性欧美成人播放77777 | 五月天国产精品 | 国产精品久久久久久久久免费软件 | 野外吮她的花蒂高h在线观看 | 国产.com| 91超薄丝袜肉丝一区二区 | 亚洲精品91 | 亚洲国产精品毛片 | 五月天综合色 | 国产精品15p | 国产精品久久久久久久午夜 | 456亚洲影院 | 久久久久成人精品无码中文字幕 | 中文字幕在线免费看线人 | 精品一区二区在线视频 | 国产一区免费在线观看 | 岛国av免费 | 成人性生交大片 | 奶波霸巨乳一二三区乳 | 在线五月天 | 男人午夜剧场 | 伊人青青草原 | 成人午夜影院在线观看 | 欧美老女人性视频 | 视频在线一区二区三区 | 91丨国产丨捆绑调教 | 成人动漫在线观看视频 | 亚洲国产二区 | 免费看国产曰批40分钟粉红裤头 | 97se在线视频 | 青青国产在线 | 色综合激情 | 青青草97国产精品免费观看 | 日韩欧美综合久久 | 在线免费观看av不卡 | 老司机一区二区 | 亚洲人 女学生 打屁股 得到 | 亚洲品质自拍视频网站 | 日韩在线免费av | 污污在线看 | 男人用嘴添女人下身免费视频 | 九七超碰在线 | 性色综合 | 天干夜天干天天天爽视频 | 亚洲欧美精品久久 | 久久99精品久久久久久琪琪 | 欧美在线看| 我和公激情中文字幕 | 床戏高潮做进去大尺度视频网站 | 色噜噜日韩精品欧美一区二区 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 国产夫妻露脸 | 精品国产乱码久久久久久浪潮 | 日日夜夜婷婷 | 爱情岛论坛亚洲品质自拍 | 欧美淫视频| 青青操av在线 | 成人av免费网址 | 亚洲欧美国产日韩精品 | 女人做爰全过程免费观看美女 | 99久久精品免费看国产免费软件 | 国产视频一区二区在线 | 性视频播放免费视频 | 波多野结衣大片 | 国产免费麻豆 | 精品久| 美人被强行糟蹋np各种play | 色噜噜狠狠一区二区三区果冻 | 国产美女永久无遮挡 | 久久久久久久久久久久国产精品 | 亚洲精品无码久久久久 | 国产不卡在线观看视频 | 久操视频免费观看 | 中国在线观看免费高清视频播放 |