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