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

歡迎訪問 生活随笔!

生活随笔

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

java

Java中异常概述

發布時間:2024/4/14 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中异常概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Java中異常概述

1.1Java異常結構


Throwable可以用來表示任何可以被作為異常拋出的類。Throwable對象派生出兩種類型:Error和Exception,前者用來表示編譯時和系統錯誤,程序員往往不必關心;后者是可以被拋出的基本類型,需要程序員關注。RuntimeException是Exception的派生類,不同點將在2.2與2.3小結中描述。

?????? Java的異常(Exception)按照編譯器檢查方式又可以分為檢查型異常(CheckedException)和非檢查型異常(UncheckedException)。

1.2檢查型異常(CheckedException)

在Java中所有不是RuntimeException派生的Exception都是檢查型異常。當函數中存在拋出檢查型異常的操作時該函數的函數聲明中必須包含throws語句。調用改函數的函數也必須對該異常進行處理,如不進行處理則必須在調用函數上聲明throws語句。

?????? 檢查型異常是JAVA首創的,在編譯期對異常的處理有強制性的要求。在JDK代碼中大量的異常屬于檢查型異常,包括IOException,SQLException等等。

1.3非檢查型異常(UncheckedException)

?????? 在Java中所有RuntimeException的派生類都是非檢查型異常,與檢查型異常相對拋出非檢查型異常可以不在函數聲明中添加throws語句,調用函數上也不需要強制處理。

?????? 常見的NullPointException,ClassCastException是常見的非檢查型異常。非檢查型異常?可以不使用try...catch進行處理,但是如果有異常產生,則異常將由JVM進行處理。對于RuntimeException的子類最好也使用異常處理機制。雖然RuntimeException的異常可以不使用try...catch進行處理,但是如果一旦發生異常,則肯定會導致程序中斷執行,所以,為了保證程序再出錯后依然可以執行,在開發代碼時最好使用try...catch的異常處理機制進行處理。

1.4異常的關鍵字

Java異常處理涉及到五個關鍵字,分別是:try、catch、finally、throw、throws

五個關鍵字的相關語法略。

二、異常處理方式

2.1異常鏈

在JDK1.4以后版本中,Throwable類支持異常鏈機制。Throwable 包含了其線程創建時線程執行堆棧的快照。它還包含了給出有關錯誤更多信息的消息字符串。最后,它還可以包含 cause(原因):另一個導致此 throwable 拋出的 throwable。它也稱為異常鏈 設施,因為 cause 自身也會有 cause,依此類推,就形成了異常鏈,每個異常都是由另一個異常引起的。?

通俗的說,異常鏈就是把原始的異常包裝為新的異常類,并在新的異常類中封裝了原始異常類,這樣做的目的在于找到異常的根本原因。

2.2異常的轉譯

異常轉譯就是將一種異常轉換另一種新的異常并且再拋出的過程,異常轉譯的目的是將系統中出現的不同類型的異常進行型別的統一,以便于異常的統一處理。

絕大多數情況下轉譯出的“結果異常”類型都是自定義異常,并且在異常轉譯過程中需要將“原始異常”放置在異常鏈中。

2.3自定義異常

?????? 自定義異常就是自寫的繼承了Exception或RuntimeException的異常類。實現自定義異常的目的大致可分為以下三種:

1.?????? 使用統一的類型標識多種不同型別的異常。

2.?????? 在產生異常時更好的進行信息傳遞。常見的手段是在異常中定義異常碼,異常信息,環境對象等字段。

3.?????? 將檢查型異常轉換為非檢查型異常。

三異常處理

3.1關于檢查型異常與非檢查型異常的爭論

?????? 在實際編程過程中使用檢查型異常與非檢查型異常的時機從JAVA語言產生的那一天開始就已經產生。

?????? 最為官方的說法可以參考Java最核心設計者之一JOSHUA BLOCH的《Effective Java》異常使用章節,他的主張是:對可恢復的情況使用檢查型異常,對編程錯誤使用運行時異常。

?????? 雖然上述說法有著“皇家血統”但事實上在我看來Java的檢查型異常是一個非常失敗的作品,因為檢查型異常具有超強的“污染性”,它的出現所帶來的麻煩遠比好處要多得多。我的觀點是:幾乎在所有的情況下都不應當使用檢查型異常。當遇到檢查型異常無法處理的情況時,應該使用異常轉譯轉換為非檢查型異常再拋出。我非常興奮的看到在Think in Java 4th?Edition上作者對這樣的觀點進行了詳細的描述。

Java創造檢查型異常的初衷是在編譯期強制程序員對異常情況進行處理,從而使得程序更加的強壯可靠,可是Java的作者忘記了:好的程序設計語言能幫助程序員寫出好程序,但無論那種語言都避免不了程序員用它寫出壞程序。

?????? 對于異常處理的關鍵點并不在于是在編譯期還是運行期對異常進行檢查,而在于異常一定要檢查并且需要建立統一的、一致的異常檢查與處理模型。

3.2我的異常處理原則

1.?????? 僅處理當前可處理的異常。

2.?????? 對所有的檢查型異常使用異常轉譯。

3.?????? 所有的自定義異常都是非檢查型異常。

4.?????? 異常流程與正常流程進行分離,并盡可能的統一處理。

5.?????? 在非異常處理模塊的catch塊中盡可能不記日志。

6.?????? 除非是進行資源釋放操作,否則catch塊不應為空或者出現e.printTrace

7.?????? finally塊中不能出現復雜的操作,且不可以拋出異常,也不可以出現return。

3.3我處理異常的一般方式

1.?????? 將throw語句視為異常流程的起點,將Exception對象視作正常流程向異常流程躍遷過程中的數據載體。

2.?????? 建立統一的自定義異常類型,用以包裝所有檢查型異常。

3.?????? 大多數情況下僅在程序的主干上建立唯一的異常捕獲點,并在這個點上對接收到的異常進行處理。

總結

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

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