Java中的異常可以分為檢查異常和非檢查異常,通常我們也稱檢查異常為編譯時異常,非檢查異常為運行時異常。
檢查異常指的是在代碼中明確地聲明需要處理的異常,如果不處理就無法通過編譯。例如,文件讀寫操作中的IOException、網絡連接中的ConnectException都是檢查異常。
try { BufferedReader br = new BufferedReader(new FileReader("file.txt")); String line = null; while((line = br.readLine()) != null) { System.out.println(line); } br.close(); } catch(IOException e) { e.printStackTrace(); }
上述代碼中,因為文件讀取操作可能會出現IOException異常,如果不對其進行處理,編譯器會報錯。
非檢查異常指的是在運行期間拋出的異常,在代碼中不需要顯式地處理該異常。例如,NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException都是非檢查異常。
int[] array = new int[5]; try { int i = array[10]; System.out.println(i); } catch(ArrayIndexOutOfBoundsException e) { e.printStackTrace(); }
上述代碼中,因為數組越界訪問會拋出ArrayIndexOutOfBoundsException異常,但是編譯器并不會在編譯時檢查到這個問題。
總的來說,檢查異常多用于需要在代碼中進行明確異常處理的場景,而非檢查異常多用于無法通過編譯時檢查到的程序錯誤。