最近在閱讀《Java編程思想》的時(shí)候看到了書中對(duì)異常的描述,結(jié)合自己閱讀源碼經(jīng)歷,談?wù)勛约簩?duì)異常的理解。首先記住下面兩句話:

  除非你能解決(或必須要處理)這個(gè)異常,否則不要捕獲它,如果打算記錄錯(cuò)誤消息,那么別忘了把它再拋出去。

  異常既代表一種錯(cuò)誤,又可以代表一個(gè)消息。 

一、為什么會(huì)有異常

  這個(gè)問題其實(shí)不難理解,如果一切都按我們?cè)O(shè)計(jì)好的進(jìn)行,那么一般(不一般的情況是我們?cè)O(shè)計(jì)的就是有缺陷的)是不會(huì)出現(xiàn)異常的,比如說一個(gè)除法操作:

public int div(int x,int y){  return x/y;
}

  當(dāng)然我們?cè)O(shè)計(jì)的是除數(shù)不能為0,我們也在方法名上添加了注釋,輸出不能為0,如果用戶按照我們的要求使用這個(gè)方法,當(dāng)然不會(huì)有異常產(chǎn)生??墒呛芏鄷r(shí)候,用戶不一定閱讀我們的注釋,或者說,輸入的數(shù)據(jù)不是用戶主動(dòng)指定的,而是程序計(jì)算的中間結(jié)果,這個(gè)時(shí)候就會(huì)導(dǎo)致除數(shù)為0的情況出現(xiàn)。

  現(xiàn)在異常情況出現(xiàn)了,程序應(yīng)該怎么辦呢,直接掛掉肯定是不行的,但是程序確實(shí)不能自己處理這種突發(fā)情況,所以得想辦法把這種情況告訴用戶,讓用戶自己來決定,也就是說程序需要把遇到的這種異常情況包裝一下發(fā)送出去,由用戶來決定如何處理。

  異常表示著一種信息。熟悉EOFException的程序員一般都會(huì)了解,這個(gè)異常,表示信息的成分大于表示出現(xiàn)了異常,不熟悉的參照我之前的博客:http://www.