java 異常

Throwable類是整個Java異常體系的超類,都有的異常類都是派生自這個類。包含Error和Exception兩個直接子類。數據庫


Error類通常是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢等。對於這類錯誤的致使的應用程序中斷,僅靠程序自己沒法恢復和預防,遇到這樣的錯誤,建議讓程序終止。
Exception是應用層面上最頂層的異常類,包含RuntimeException(運行時異常)和 Checked Exception(受檢異常)。編程

 
RuntimeException是一種Unchecked Exception,即表示編譯器不會檢查程序是否對RuntimeException做了處理,在程序中沒必要捕獲RuntimException類型的異常,也沒必要在方法體聲明拋出RuntimeException類。通常來講,RuntimeException發生的時候,表示程序中出現了編程錯誤,因此應該找出錯誤修改程序,而不是去捕獲RuntimeException。網絡

常見的Runtime異常:ide

ArithmeticException(算術異常)  1/0函數

ClassCastException (類轉換異常)integer轉換string異常指針

IllegalArgumentException (非法參數異常) 參數爲int輸出倒是stringcode

NullPointerException (空指針異常)blog


Checked Exception是相對於Unchecked Exception而言的,全部繼承自Exception而且不是RuntimeException的異常都是Checked Exception。JAVA 語言規定必須對checked Exception做處理,編譯器會對此做檢查,要麼在方法體中聲明拋出checked Exception,要麼使用catch語句捕獲checked Exception進行處理,否則不能經過編譯。繼承

經常使用的Checked Exception有內存

IOException、

ClassNotFoundException 找到不到指定類

Java異常處理涉及到五個關鍵字,分別是:try、catch、finally、throw、throws。下面將驟一介紹,經過認識這五個關鍵字,掌握基本異常處理知識。

  • try       -- 用於監聽。將要被監聽的代碼(可能拋出異常的代碼)放在try語句塊以內,當try語句塊內發生異常時,異常就被拋出。
  • catch   -- 用於捕獲異常。catch用來捕獲try語句塊中發生的異常。
  • finally  -- finally語句塊老是會被執行。它主要用於回收在try塊裏打開的物力資源(如數據庫鏈接、網絡鏈接和磁盤文件)。只有finally塊執行完成以後,纔會回來執行try或者catch塊中的return或者throw語句,若是finally中使用了return或者throw等終止方法的語句,則就不會跳回執行,直接中止。
  • throw   -- 用於拋出特定的異常。
  • throws -- 用在方法簽名中,用於聲明該方法可能拋出的異常。
多重catch編寫注意:

catch異常控制的範圍應該由小及大,若是把父類異常寫到前面,會屏蔽後面的子類異常。由於一次只會有一個catch會被匹配到。

RuntimeException異常類包括運行時各類常見的異常,ArithmeticException類和ArrayIndexOutOfBoundsException類都是它的子類。所以,RuntimeException異常類的catch子句應該放在最後面,不然可能會屏蔽其後的特定異常處理或引發編譯錯誤。

Throw: 寫在函數方法內部的,拋出指定的異常。

 

Throws: 修飾函數頭部

Throws拋出異常的規則:

若是想要拋出的是不受檢查異常(unchecked exception),那麼能夠不使用throws關鍵字來聲明要拋出的異常,編譯仍能順利經過,但在運行時會被系統拋出。好比你throws了RuntimeException,可是他是unchecked類型異常,引用時不須要用try catch包圍起來。

public class ExceptionDemo2 {
	    static void throw1() throws RuntimeException {
	        System.out.println("Inside throw1 . ");
	        throw new RuntimeException("demo");
	    }
	    public static void main(String[] args){
	        throw1();
	    }
}


若是想要拋出的是檢查異常(checked exception)。要麼用try-catch語句捕獲,要麼用throws子句聲明將它拋出,不然會致使編譯錯誤。

public class ExceptionDemo2 {
	    static void throw1() throws IllegalAccessException {
	        System.out.println("Inside throw1 . ");
	        throw new IllegalAccessException("demo");
	    }
	    public static void main(String[] args){
	        try {
	            throw1();
	        }catch(IllegalAccessException e ){
	            System.out.println("Caught " + e);
	        }
	    }
}
相關文章
相關標籤/搜索