Java 異常處理

 

1、java 異常

異常指不期而至的各種狀況,如:文件找不到、網絡連接失敗、非法參數等。

異常是一個事件,它發生在程序運行期間,干擾了正常的指令流程。

Java通過API中 Throwable 類的衆多子類描述各種不同的異常。因而,Java異常都是對象,是Throwable子類的實例,描述了出現在一段編碼中的 錯誤條件。當條件生成時,錯誤將引發異常。

      Java異常類層次結構圖:

        

java中將程序出現問題封裝成了一個 Throwable
   Throwable 分兩種:Error(錯誤)和Exception(異常)
         Error(錯誤):嚴重問題,指運行時環境發生的錯誤,由jvm自動生成並拋出。例如JVM 內存溢出。

         Exception(異常):不嚴重的問題,程序可以處理也必須要處理的(重點)

 注意:異常和錯誤的區別:異常能被程序本身可以處理,錯誤是無法處理。


    Exception分兩種:運行期異常和編譯期異常
        RuntimeException(運行期異常): 編譯的時候不報錯,運行的時候可能有報錯,可以處理可以不處理
         編譯期異常 :除了運行期異常以外,其他全是編譯期異常,必須要處理,否則程序不能通過編譯也就不能運行

 

2、處理異常機制

異常處理機制爲:拋出異常,捕捉異常。

java.lang.Throwable常用方法:

 2.1 捕獲異常:try、catch 和 finally

 try{
               需要被監測的代碼塊
}catch(異常的名稱 引用名稱){
               處理方式
 }finally{
               無論是否捕獲或處理異常,finally塊裏的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。永遠返回finally中的結果。在以下4種特殊情況下,finally塊不會被執行:
         1)在finally語句塊中發生了異常。
         2)在前面的代碼中用了System.exit()退出程序。
         3)程序所在的線程死亡。
         4)關閉CPU。
  }
     執行的流程:當需要被監測的代碼塊中一旦有異常發生,jvm就將該異常封裝成一個異常對象,在傳遞到相應的catch中進行處理
     注意:

        1.當try中代碼塊一旦有異常發生就直接執行相應catch中代碼,try後面的代碼就不會再執行 
         2.catch可以有多個,每個catch塊中代碼都可以寫不同的處理方式
         3.捕獲異常的時候可以直接捕獲父類異常,但是必須寫在最後一個catch中
         4.捕獲異常的時候建議捕獲更具體的異常,這樣處理起來更加具體

		try{
			int n = 10 / 0;
			int[] arr = new int[10];
			arr[10] = 100;
			
		}catch(ArithmeticException e){//e=0x1111
			System.out.println("除數不能爲0!");
			System.out.println(e.getMessage());//打印異常出錯的信息
//			e.printStackTrace();//打印異常出錯的詳細信息,異常的名稱,異常的信息,異常出錯的位置
		}catch(ArrayIndexOutOfBoundsException e){
			System.err.println("索引越界啦!");//紅色的字體輸出
		}catch(Exception e){
			System.out.println("發生異常了------");
		}finally{
			System.out.println("finally一定會執行,不信試試!");
		}
//結果
除數不能爲0!
/ by zero
finally一定會執行,不信試試!

2.2 、拋出異常:throws/throw 關鍵字

如果一個方法沒有捕獲一個檢查性異常,那麼該方法必須使用 throws 關鍵字來聲明。

throws 關鍵字放在方法簽名的尾部。 異常名稱

throw 關鍵字拋出一個異常對象

注意:

通過throws來處理異常,並沒有真正的處理異常,僅僅是讓程序通過編譯能夠運行,想真正的處理異常還是得用try...catch

public void deposit(double amount) throws IOException,ArithmeticException  {
    // Method implementation
    throw new RemoteException();
  }

定義異常處理時,什麼時候定義try,什麼時候定義throws呢?

         功能內部如果出現異常,如果內部可以處理,就用try;

         如果功能內部處理不了,就必須聲明出來,讓調用者處理。

3. 自定義異常

在 Java 中你可以自定義異常。編寫自己的異常類時需要記住下面的幾點。一般繼承Exception 類即可。

  • 所有異常都必須是 Throwable 的子類。
  • 如果寫一個檢查性異常類,則需要繼承 Exception 類。
  • 如果寫一個運行時異常類,那麼需要繼承 RuntimeException 類。
class MyException extends Exception{
}

在程序中使用自定義異常類,大體可分爲以下幾個步驟。
(1)創建自定義異常類。
(2)在方法中通過throw關鍵字拋出異常對象。
(3)如果在當前拋出異常的方法中處理異常,可以使用try-catch語句捕獲並處理;否則在方法的聲明處通過throws關鍵字指明要拋出給方法調用者的異常,繼續進行下一步操作。
(4)在出現異常方法的調用者中捕獲並處理異常。

 

參考文章: https://blog.csdn.net/hguisu/article/details/6155636

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