java 異常知識點總結 error exception throw throws

         一面試官問到java 異常怎麼劃分?我回答error 和exception.Exception是分爲什麼?

我回答編譯時異常和運行時異常。面試官接下來讓我對兩者舉個例子。我混亂了,只知道一些能說出來的異常,卻不知道他們屬於編譯時異常還是運行時異常。通過網上查資料線面做個總結:

        異常分爲 error 和Exception

   Error

     當程序發生不可控的錯誤時,通常做法是通知用戶並中止程序的執行。與異常不同的是Error及其子類的對象不應被拋出。

      Error是throwable的子類,代表編譯時間和系統錯誤,用於指示合理的應用程序不應該試圖捕獲的嚴重問題。

      Error由Java虛擬機生成並拋出,包括動態鏈接失敗,虛擬機錯誤等。程序對其不做處理。

      我們比較熟悉 的內存溢出。outofMemory

 

    Exception 分爲CheckedException和RunntimeException

 

        ①Checked異常(編譯期異常)

      只有java語言提供了Checked異常。java認爲Checked異常都是可以被處理的異樣,所以java程序必須顯式的處理Checked異常。如果程序沒有處理Checked異常,該程序在編譯時就會發生錯誤無法編譯。這體現了Java的設計哲學;對Checked異常處理的方法有兩種:

     1.當前方法知道如何出來異常,則用try....catch塊來處理該異常。

     2.當前方法不知道如何處理,則在定義該方法時聲明拋出該異常。

      我們比較熟悉的Checked的異常有:

       Java.lang.ClassNotFoundException(類找不到)

       Java.lang.NoSuchMethodException(找不到方法)

       Java.io.IoException(IO異常)

 

      ②RuntimeException(運行時異常)

        Runtime如除數是0和數組下標越界等,其產生頻繁,處理麻煩,若顯示申明或者捕獲將會對程序的可讀性和運行效率影響很  大。 所以由系統自動檢測並將它們交給缺省的異常處理程

        序。當然如果你有處理要求也可以顯示捕獲它們。

       我們比較熟悉的RumtimeException類的子類有

       Java.lang.ArithmeticException(算術異常)
       Java.lang.ClassCastException (類型轉換異常)
       Java.lang.IndexOutOfBoundsException(數組越界異常)
       Java.lang.NullPointerException(空指針異常)

 

    

 

下面說說異常這塊的throw 和throws的區別

     處理異常一般分爲三種:

      1.直接在catch語句裏面處理。

      2.不管會發生什麼異常直接拋給調用者 寫法就是在聲明方法的後面加上throws Exception

      3.自定義的異常。通過throw 關鍵字拋出異常 然後通過在方法的後面加上throws Exception 把自定義的異常拋給調用者。

      throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。
      throws語句用在方法聲明後面,表示再拋出異常,由該方法的調用者來處理。

 

     throws主要是聲明這個方法會拋出這種類型的異常,使它的調用者知道要捕獲這個異常。有可能會有多個異常 不管什麼異常直接扔給調用者處理。
     throw是具體向外拋異常的動作,所以它是拋出一個異常實例。throw拋出的是自己定義好的異常。

    if(a!=b)
              throw new  Exception3("自定義異常");

     一旦使用了throw 拋出具體的異常,聲明方法的時候要用throws來扔給調用者。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章