国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 異常處理相關

番茄西紅柿 / 3381人閱讀

摘要:相關類的結(jié)構如下所示類類是語言中所有錯誤和異常的超類,只有當一個對象直接或者間接的是此類的實例時,才能通過語句拋出異常,同樣,只有這種類才能被語句捕獲進行處理類的子類是錯誤,不是程序可以處理的,一般會是內(nèi)存不足,線程終止,虛擬機運行錯誤等,

相關類的結(jié)構如下所示

java.lang.Object

java.lang.Throwable

java.lang.Error

java.lang.Exception

java.lang.RuntimeException

Throwable類

Throwable 類是Java語言中所有錯誤和異常的超類,只有當一個對象直接或者間接的是此類的實例時,Java才能通過throw語句拋出異常,同樣,只有這種類才能被try……catch語句捕獲進行處理

Throwable類的子類Error是錯誤,不是程序可以處理的,一般會是內(nèi)存不足,線程終止,Java虛擬機運行錯誤等,只能聽之任之,JVM通常會kill掉這個進程

Throwable類的子類Exception是異常,是程序可以處理的,進一步分為CheckedException 和 UncheckedException

CheckedException發(fā)生在編譯階段,代碼語句必須使用try……catch或者throws,否則無法進行編譯,比如StreamTokenizer必須聲明拋出異常IOException,除了Runtime Exception類集之外,其他的Exception類集都是CheckeException

UncheckedException發(fā)生在程序的運行階段,一般來說具有不確定性,不容易定位和DEBUG

Exception類

該類指出了合理的應用程序想要捕獲的異常條件,有兩個參數(shù),默認構造可以是兩個可選參數(shù),一個是詳細信息,一個是異常原因,分別對應下述四個構造方法,分別于super對應

public Exception()

public Exception(String message)

public Exception(String message, Throwable cause)

public Exception(Throwable cause)

RuntimeException類

RuntimeException是那些在Java 虛擬機正常運行期間拋出的異常的超類,屬于uncheckedException,比如說發(fā)生數(shù)組越界,空指針等邏輯引起的問題

可能在執(zhí)行方法期間拋出,但是沒有被捕獲的RuntimeException的任何子類都不用在throws子句中聲明

包含四個構造方法

RuntimeException()

RuntimeException(String message)

RuntimeException(String message, Throwable cause)

RuntimeException(Throwable cause)

try - catch - finally

在try代碼片段中,包含著有可能拋出異常的語句,如果無異常,則直接跳到finally代碼塊,否則相應的捕獲異常,執(zhí)行catch代碼塊的內(nèi)容

無論是否try代碼塊發(fā)生異常,finally都會被執(zhí)行,可以在這里進行一些接口的close操作等

如果代碼中顯式的聲明了某一個異常類型,則異常處理機制不會顯示這個異常是在哪里拋出的,如果是沒有聲明異常遭遇中斷,異常處理會顯示出處

每一個catch按照書寫的先后依次匹配執(zhí)行,一旦亦常被某一個catch捕獲,則必不會被其他的catch捕獲處理

當try代碼塊或者catch代碼塊中包括return語句的時候,finally代碼塊將會在return之前被強制執(zhí)行,finally不被執(zhí)行僅僅當下列條件被滿足:

代碼在finally代碼塊之前即發(fā)生錯誤

代碼在finally代碼塊之前進行了System.exit()

當前線程由于某種情況丟失

關機,或者各種奇葩的可能條件

throw 和 throws

throws 是方法拋出異常的聲明,表示一個預動作,說明下方方法可能會拋出異常,throws不做其他處理,僅僅是上交異常到調(diào)用,方法中拋出的任何異常都必須有throws聲明,除非是將交由運行時系統(tǒng)自動拋出的RuntimeException

throw是拋出異常,是一個明確的動作,必須與try……catch或者throws一起使用,拋出的只能是Throwable的類集中的類,如果所有的方法都將異常往上層調(diào)用者拋,那么JVM最后的處理就是打印異常消息和堆棧信息

自定義異常類型

一般來說,套路如下:

定義一個類,繼承自Throwable或者某一個子類

構造方法,或者直接使用super的構造方法

throws聲明,在代碼塊的某處throw該異常類

catch到拋出的異常進行處理

異常鏈機制

當異常較少的時候,我們可以對每一個異常進行try 和catch, 但是如果出現(xiàn)多個異常,顯然通過一個Exception處理所有異常的方式會增加維護代碼DEBUG的困難度,所以我們需要將異常信息進行封裝,然后捕獲我們的異常封裝類即可

異常的處理方式有兩種,一種是throws拋出異常后交給上級去處理,另一種就是使用try和catch進行具體的修正處理,異常鏈的處理采用第一種方式,在try ……catch的catch代碼塊中不做任何處理,唯一的動作就是拋出封裝好的異常信息,然后會有throws拋出該異常,遞歸的每一層都如此控制異常拋出,就形成了一條異常鏈

如果我們想要在捕獲到一個異常后拋出另外一個異常,那么,我們可以調(diào)用Throwable類集的getCause()方法,得到類中的cause參數(shù),這個參數(shù)保存的就是原始存有的異常信息,也就是說cause是導致拋出該throwable的throwable

保留有異常鏈的catch代碼塊中可以使用Throwable的printStackTrace()方法來打印整個異常信息

getCause() 返回由一個需要Throwable的構造方法提供的cause,或者是在創(chuàng)建Throwable之后通過initCause()來設定cause,子類不必要重寫,也不必重寫printStackTrace()

printStackTrace()方法會將對象的堆棧跟蹤輸出到輸出流,作為System.err的值

幾個建議

盡量在try中不要包含太多的代碼,縮小異常范圍圈

如果有的接口即使有異常也照樣要運行,那么應該使用finally

縮小catch捕獲的異常,盡量使catch捕獲明確的單個異常

拋出異常的時候,盡量包含易讀易懂的描述和名稱

不在構造函數(shù)中拋出異常,不在finally代碼塊中處理返回

不要老拋出異常,會降低Java的效率和系統(tǒng)的性能

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72367.html

相關文章

  • Java 異常實戰(zhàn)

    摘要:不過按照經(jīng)驗來說,這類異常要么盡量避免,要么出現(xiàn)了就要做異常處理,從而保證程序的健壯性。業(yè)務是千變?nèi)f化,但是它們可能產(chǎn)生的異常處理方式是不會變化的,按照這個思路去做異常處理即可。 前言:說到異常體系,可能對于一些初入職場的老鐵會很頭痛,不能夠很清晰的描述異常是個什么情況。那么本文將通過打流水仗的方式給大家介紹一下工作中涉及的異常知識。首先能看到本文,說明也對異常是有了解的,所以文章開頭...

    libxd 評論0 收藏0
  • Java新手的一些建議——Java知識點歸納(Java基礎部分)

    摘要:中很多特性或者說知識點都是和面向?qū)ο缶幊谈拍钕嚓P的。在多線程中內(nèi)容有很多,只是簡單說明一下中初步使用多線程需要掌握的知識點,以后有機會單獨再詳細介紹一些高級特性的使用場景。   寫這篇文章的目的是想總結(jié)一下自己這么多年來使用java的一些心得體會,主要是和一些java基礎知識點相關的,所以也希望能分享給剛剛?cè)腴T的Java程序員和打算入Java開發(fā)這個行當?shù)臏市率謧儯M梢越o大家一些經(jīng)...

    lykops 評論0 收藏0
  • Java程序設計筆記

    摘要:對象的自動清除對象回收是由垃圾回收線程負責方法可以要求系統(tǒng)進行垃圾回收,僅僅是建議系統(tǒng)沒有析構方法,但的有類似方法系統(tǒng)在回收時會自動調(diào)用對象的方法子類的方法可以在里面釋放系統(tǒng)資源,一般來說,子類的方法中應該調(diào)用父類的方法。 對象的自動清除 對象回收是由垃圾回收線程負責 System.gc()方法可以要求系統(tǒng)進行垃圾回收,僅僅是建議系統(tǒng) java沒有析構方法,但Object的final...

    microcosm1994 評論0 收藏0
  • java異常處理

    摘要:異常處理機制異常與異常類的繼承體系在程序中,當程序出現(xiàn)意外情況時,系統(tǒng)會自動生成一個來通知程序,從異常發(fā)生出逐漸向外傳播,如果沒有人來處理該異常,就會交給來處理,對異常的處理方法是,打印異常跟蹤棧信息,并中止程序的執(zhí)行。 1 為什么要處理異常? 異常機制可以使程序的異常處理代碼與正常業(yè)務代碼分離,保證程序代碼的健壯性。在設計程序的時候,好的程序需要盡可能處理已知的可能產(chǎn)生的錯誤,但是事...

    LuDongWei 評論0 收藏0
  • java異常的設計和使用

    摘要:異常處理作用調(diào)試程序定位缺陷。對異常的處理是系統(tǒng)容錯可靠性的一環(huán)。拋出需要具體子異常捕獲同時也需要具體子異常不同子異常處理會不同。如有基礎基類異常調(diào)用者可以選擇使用這個基類該類下面的所有子異常使用統(tǒng)一處理也可以單獨對子異常處理。 showImg(https://segmentfault.com/img/bVbrm5g); 1 背景 1年前的文章,源于Sonar靜態(tài)代碼掃描中,項目歷史代...

    sshe 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<