1. 程式人生 > >編譯時異常和執行時異常的區別

編譯時異常和執行時異常的區別

最簡單的說法:

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迴圈,一直往棧裡寫,編譯器是不會出錯的,可是執行期就會出現棧滿的錯誤··