Java中的異常和處理詳解

簡(jiǎn)介

Throwable類是Java異常類型的頂層父類道批,一個(gè)對(duì)象只有是 Throwable 類的(直接或者間接)實(shí)例错英,他才是一個(gè)異常對(duì)象,才能被異常處理機(jī)制識(shí)別隆豹。JDK中內(nèi)建了一些常用的異常類椭岩,我們也可以自定義異常。

Java標(biāo)準(zhǔn)庫內(nèi)建了一些通用的異常璃赡,這些類以Throwable為頂層父類判哥。

Throwable又派生出Error類和Exception類。

錯(cuò)誤: Error類以及他的子類的實(shí)例碉考,代表了JVM本身的錯(cuò)誤塌计。錯(cuò)誤不能被程序員通過代碼處理,Error很少出現(xiàn)侯谁。因此夺荒,程序員應(yīng)該關(guān)注Exception為父類的分支下的各種異常類。

異常: Exception以及他的子類良蒸,代表程序運(yùn)行時(shí)發(fā)送的各種不期望發(fā)生的事件技扼。可以被Java異常處理機(jī)制使用嫩痰,是異常處理的核心剿吻。

Java異常的分類和類結(jié)構(gòu)圖

VI1NrD.png

分類

總體上我們根據(jù)Javac對(duì)異常的處理要求,將異常類分為2類串纺。

非檢查異常(unckecked exception): Error 和 RuntimeException 以及他們的子類丽旅。javac在編譯時(shí),不會(huì)提示和發(fā)現(xiàn)這樣的異常纺棺,不要求在程序處理這些異常榄笙。所以如果愿意,我們可以編寫代碼處理(使用try…catch…finally)這樣的異常祷蝌,也可以不處理茅撞。對(duì)于這些異常,我們應(yīng)該修正代碼巨朦,而不是去通過異常處理器處理 米丘。這樣的異常發(fā)生的原因多半是代碼寫的有問題。如除0錯(cuò)誤ArithmeticException糊啡,錯(cuò)誤的強(qiáng)制類型轉(zhuǎn)換錯(cuò)誤ClassCastException拄查,數(shù)組索引越界ArrayIndexOutOfBoundsException,使用了空對(duì)象NullPointerException等等棚蓄。

檢查異常(checked exception): 除了Error 和 RuntimeException的其它異常堕扶。javac強(qiáng)制要求程序員為這樣的異常做預(yù)備處理工作(使用try…catch…finally或者throws)碍脏。在方法中要么用try-catch語句捕獲它并處理,要么用throws子句聲明拋出它稍算,否則編譯不會(huì)通過典尾。這樣的異常一般是由程序的運(yùn)行環(huán)境導(dǎo)致的。因?yàn)槌绦蚩赡鼙贿\(yùn)行在各種未知的環(huán)境下邪蛔,而程序員無法干預(yù)用戶如何使用他編寫的程序,于是程序員就應(yīng)該為這樣的異常時(shí)刻準(zhǔn)備著扎狱。如SQLException , IOException,ClassNotFoundException 等侧到。

需要明確的是: 檢查和非檢查是對(duì)于javac來說的,這樣就很好理解和區(qū)分了淤击。

自定義異常

自定義異常
如果要自定義異常類匠抗,則擴(kuò)展Exception類即可,因此這樣的自定義異常都屬于檢查異常(checked exception)污抬。如果要自定義非檢查異常汞贸,則擴(kuò)展自RuntimeException。

按照國(guó)際慣例印机,自定義的異常應(yīng)該總是包含如下的構(gòu)造函數(shù):

  • 一個(gè)無參構(gòu)造函數(shù)
  • 一個(gè)帶有String參數(shù)的- 構(gòu)造函數(shù)矢腻,并傳遞給父- 類的構(gòu)造函數(shù)。
  • 一個(gè)帶有String參數(shù)和T- hrowable參數(shù)射赛,并都傳- 遞給父類構(gòu)造函數(shù)
  • 一個(gè)帶有Throwable 參數(shù)的構(gòu)造函數(shù)多柑,并傳遞給父類的構(gòu)造函數(shù)。

下面是IOException類的完整源代碼楣责,可以借鑒竣灌。

public class IOException extends Exception
{
    static final long serialVersionUID = 7818375828146090155L;
 
    public IOException()
    {
        super();
    }
 
    public IOException(String message)
    {
        super(message);
    }
 
    public IOException(String message, Throwable cause)
    {
        super(message, cause);
    }
 
    public IOException(Throwable cause)
    {
        super(cause);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市秆麸,隨后出現(xiàn)的幾起案子初嘹,更是在濱河造成了極大的恐慌,老刑警劉巖沮趣,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屯烦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡房铭,警方通過查閱死者的電腦和手機(jī)漫贞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來育叁,“玉大人迅脐,你說我怎么就攤上這事『浪裕” “怎么了谴蔑?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵豌骏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我隐锭,道長(zhǎng)窃躲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任钦睡,我火速辦了婚禮蒂窒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荞怒。我一直安慰自己洒琢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布褐桌。 她就那樣靜靜地躺著衰抑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荧嵌。 梳的紋絲不亂的頭發(fā)上呛踊,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音啦撮,去河邊找鬼谭网。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赃春,可吹牛的內(nèi)容都是我干的蜻底。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼聘鳞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼薄辅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抠璃,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤站楚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后搏嗡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窿春,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年采盒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旧乞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磅氨,死狀恐怖尺栖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烦租,我是刑警寧澤延赌,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布除盏,位于F島的核電站,受9級(jí)特大地震影響挫以,放射性物質(zhì)發(fā)生泄漏者蠕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一掐松、第九天 我趴在偏房一處隱蔽的房頂上張望踱侣。 院中可真熱鬧,春花似錦大磺、人聲如沸抡句。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玉转。三九已至突想,卻和暖如春殴蹄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猾担。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工袭灯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绑嘹。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓稽荧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親工腋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子姨丈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355