最簡單的說法:
javac出來的異常就是編譯時異常,就是說把源代碼編譯成字節碼(class)文件時報的異常,一般如果用Eclispe,你敲完代碼保存的時候就是編譯的時候。
Java出來的異常就是運行時異常
Java異常可分為3種:
(1)編譯時異常:Java.lang.Exception
(2)運行期異常:Java.lang.RuntimeException
(3)錯誤:Java.lang.Error
Java.lang.Exception和Java.lang.Error繼承自Java.lang.Throwable;
Java.lang.RuntimeException繼承自Java.lang.Exception.
編譯時異常: 程序正確,但因為外在的環境條件不滿足引發。例如:用戶錯誤及I/O問題----程序試圖打開一個並不存在的遠程Socket端口。這不是程序本身的邏輯錯誤,而很可能是遠程機器名字錯誤(用戶拼寫錯誤)。對商用軟件系統,程序開發者必須考慮並處理這個問題。Java編譯器強制要求處理這類異常,如果不捕獲這類異常,程序將不能被編譯。
運行期異常: 這意味着程序存在bug,如數組越界,0被除,入參不滿足規范.....這類異常需要更改程序來避免,Java編譯器強制要求處理這類異常。
錯誤: 一般很少見,也很難通過程序解決。它可能源於程序的bug,但一般更可能源於環境問題,如內存耗盡。錯誤在程序中無須處理,而有運行環境處理。
順便說一下:編譯期和運行期的區別
編譯期和運行期進行的操作是不相同的,編譯器只是進行語法的分析,分析出來的錯誤也只是語法上的錯誤,而運行期在真正在分配內存·· 比如說你寫一個while循環,一直往棧里寫,編譯器是不會出錯的,可是運行期就會出現棧滿的錯誤··