一、檢查時(shí)機(jī)
1、運(yùn)行時(shí)異常: 這類(lèi)異常通常表示編程錯(cuò)誤,如除數(shù)為零、數(shù)組越界等。這類(lèi)異常是在程序運(yùn)行時(shí)才被檢查。
int result = 10 / 0; // 拋出ArithmeticException,是一種運(yùn)行時(shí)異常
2、非運(yùn)行時(shí)異常: 這類(lèi)異常通常表示可預(yù)見(jiàn)的錯(cuò)誤條件,如文件不存在、網(wǎng)絡(luò)問(wèn)題等。這類(lèi)異常在編譯階段就需要處理。
FileReader reader = new FileReader("nonexistent-file.txt"); // 拋出FileNotFoundException,是一種非運(yùn)行時(shí)異常
二、處理責(zé)任
運(yùn)行時(shí)異常: 編譯器不會(huì)檢查是否有處理或拋出運(yùn)行時(shí)異常,完全依賴(lài)于程序員。非運(yùn)行時(shí)異常: 編譯器會(huì)強(qiáng)制要求對(duì)這類(lèi)異常進(jìn)行處理(try-catch)或者聲明拋出(throws)。三、繼承結(jié)構(gòu)
運(yùn)行時(shí)異常: 繼承自RuntimeException
類(lèi)。非運(yùn)行時(shí)異常: 繼承自Exception
類(lèi),但不包括RuntimeException
。常見(jiàn)問(wèn)答
Q1: 是否應(yīng)該盡量避免使用運(yùn)行時(shí)異常?不一定。運(yùn)行時(shí)異常用于標(biāo)記程序員的編程錯(cuò)誤,一般不應(yīng)被捕獲,除非你有特殊的修復(fù)邏輯。Q2: 如何自定義非運(yùn)行時(shí)異常?可以通過(guò)繼承Exception
類(lèi),并實(shí)現(xiàn)構(gòu)造方法來(lái)自定義非運(yùn)行時(shí)異常。Q3: 在接口中應(yīng)該聲明運(yùn)行時(shí)異常嗎?一般不建議在接口中聲明運(yùn)行時(shí)異常,因?yàn)樗鼈兺ǔJ菍?shí)現(xiàn)細(xì)節(jié)。