異常體系
異常的繼承關(guān)系是Throwable-->error/Exception-->RunTimeException/ otherException:
Throwable 分為Error錯誤和Exception異常兩種掀泳,Exception又分為:RunTimeException運(yùn)行時異常 和 除了RunTimeException以外的所有繼承自Exception的類络断。RunTimeException又叫做非強(qiáng)制捕獲型異常嘲碧,什么意思呢灶轰,就像玩滑板車哮内,你帶不帶護(hù)具全看心情,大不了摔一跤仪壮,并不強(qiáng)制要求蒲稳,在運(yùn)行時有可能會拋出異常,導(dǎo)致程序崩潰辜御。這類異常往往繼承了RunTimeException或者RunTimeException本身鸭你。除了RunTimeException的所有繼承自Exception的兄弟類都屬于強(qiáng)制捕獲型異常,就好比蹦極擒权,如果你不做一些防護(hù)措施袱巨,比如栓根繩在腰上,主辦方是不會讓你去送死的碳抄。這類異常在編譯的時候就會告訴你要想運(yùn)行此程序愉老,請先做好異常處理。
異常處理又分為兩種:try /catch (自行處理異常) 和 Throws(拋給調(diào)用者去處理剖效,如果調(diào)用者也不想處理嫉入,就再往上級拋,直到拋給最頂層璧尸,比如main方法等咒林,在這一層級,如果繼續(xù)往上拋爷光,仍舊是沒有問題的垫竞,交給JVM處理,但是jvm懶得理你蛀序,這異常相當(dāng)于沒有處理)欢瞪。
自定義異常
自定義異常分為兩種活烙,正如上面提到的,根據(jù)繼承關(guān)系來確定是運(yùn)行時異常(繼承自RunTimeException)還是非運(yùn)行時異常(繼承自Exception或者Exception的非RunTimeException的子類)遣鼓。定義方式如下:
運(yùn)行時異常定義
public class NameNullPointereException extends RuntimeException{
}
如果要想帶參數(shù)啸盏,那需要重寫構(gòu)造方法
public class NameNullPointereException extends RuntimeException{
public NameEmptyException() {
}
public NameEmptyException(String s) {
super(s);
}
}
非運(yùn)行時異常定義
二者只是繼承上的區(qū)別,繼承自Exception即可譬正。需要注意的是調(diào)用時宫补,必throws 或者 try/catch。