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