Java----異常類(錯誤和異常,兩者區別)__Java

來源:互聯網
上載者:User

  在 Java 中,所有的異常都有一個共同的祖先 Throwable(可拋出)。Throwable 指定代碼中可用異常傳播機制通過 Java 應用程式傳輸的任何問題的共性。
  Throwable 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。
  ①.Exception(異常)是應用程式中可能的可預測、可恢複問題。一般大多數異常表示中度到輕度的問題。異常一般是在特定環境下產生的,通常出現在代碼的特定方法和操作中。在 EchoInput 類中,當試圖調用 readLine 方法時,可能出現 IOException 異常。
    Exception 類有一個重要的子類 RuntimeException。RuntimeException 類及其子類表示“JVM 常用操作”引發的錯誤。例如,若試圖使用空值對象引用、除數為零或數組越界,則分別引發運行時異常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
  ②.Error(錯誤)表示運行應用程式中較嚴重問題。大多數錯誤與代碼編寫者執行的操作無關,而表示代碼運行時 JVM(JAVA 虛擬機器)出現的問題。例如,當 JVM 不再有繼續執行操作所需的記憶體資源時,將出現 OutOfMemoryError。

檢查異常 和 未檢查異常 的劃分

Java中的異常分為兩大類:
  1.Checked Exception(非Runtime Exception)
  2.Unchecked Exception(Runtime Exception)
運行時異常
 RuntimeException類是Exception類的子類,它叫做運行時異常,Java中的所有運行時異常都會直接或者間接地繼承自RuntimeException類。
  Java中凡是繼承自Exception,而不繼承自RuntimeException類的異常都是非運行時異常。
  一個try後面可以跟多個catch,但不管多少個,最多隻會有一個catch塊被執行。

對於非運行時異常(checked exception),必須要對其進行處理,否則無法通過編譯。
  處理方式有兩種:
  1.使用try..catch..finally進行捕獲;
  2.在產生異常的方法聲明後面寫上throws 某一個Exception類型,如throws Exception,將異常拋出到外面一層去。
對於運行時異常(runtime exception),可以對其進行處理,也可以不處理。推薦不對運行時異常進行處理。

擴充:錯誤和異常的區別(Error vs Exception)
  1).java.lang.Error: Throwable的子類,用於標記嚴重錯誤。合理的應用程式不應該去try/catch這種錯誤。絕大多數的錯誤都是非正常的,就根本不該出現的。
     java.lang.Exception: Throwable的子類,用於指示一種合理的程式想去catch的條件。即它僅僅是一種程式運行條件,而非嚴重錯誤,並且鼓勵使用者程式去catch它。
  2).Error和RuntimeException 及其子類都是未檢查的異常(unchecked exceptions),而所有其他的Exception類都是檢查了的異常(checked exceptions).

    checked exceptions: 通常是從一個可以恢複的程式中拋出來的,並且最好能夠從這種異常中使用程式恢複。比如FileNotFoundException, ParseException等。檢查了的異常發生在編譯階段,必須要使用try…catch(或者throws)否則編譯不通過。
    unchecked exceptions: 通常是如果一切正常的話本不該發生的異常,但是的確發生了。發生在運行期,具有不確定性,主要是由於程式的邏輯問題所引起的。比如ArrayIndexOutOfBoundException, ClassCastException等。從語言本身的角度講,程式不該去catch這類異常,雖然能夠從諸如RuntimeException這樣的異常中catch並恢複,但是並不鼓勵終端程式員這麼做,因為完全沒要必要。因為這類錯誤本身就是bug,應該被修複,出現此類錯誤時程式就應該立即停止執行。 因此,面對Errors和unchecked exceptions應該讓程式自動終止執行,程式員不該做諸如try/catch這樣的事情,而是應該查明原因,修改代碼邏輯。
    RuntimeException:RuntimeException體系包括錯誤的類型轉換、數組越界訪問和試圖訪問null 指標等等。
處理RuntimeException的原則是:如果出現 RuntimeException,那麼一定是程式員的錯誤。例如,可以通過檢查數組下標和數組邊界來避免數組越界訪問異常。其他(IOException等等)checked異常一般是外部錯誤,例如試圖從檔案尾後讀取資料等,這並不是程式本身的錯誤,而是在應用環境中出現的外部錯誤。














聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.