異常體系

我們在系統中有一個基類時throwable,異常包。
然後Error類繼承之,Error類描述的是java運作時内部錯誤或者導緻資源耗盡的錯誤,一旦這種錯誤出現,不是抛出異常,會直接告知使用者并安全終止。比如棧溢出
Exception繼承throwable後,又被IOEception和RunningException繼承。
IOException表示:書寫的程式本身是沒有問題的,但是由于出現IO問題導緻的異常。比如打開一個不存在的檔案。
RunTimeException是運作時異常;是由于程式本身錯誤導緻的。
——————————————————————————————————
除了這種關系,異常還分為受查異常和非受查異常。
非受查異常:就是繼承于Error和RunTimeException類的所有異常,不強制使用者處理,但是運作會報錯終止。
受查異常:Exception以及IOException的子類,會強制使用者進行處理。
常見的運作時異常,以及導緻原因 --5個
1在數組應用中
因為數組在java中屬于引用資料類型是以,必須在使用前初始化,否則編譯時不會出錯,運作時會爆出異常,NullPointerEXception --空指向異常
**(1)**在字元串比較中,如果一個空對象"."調用對應類中成員則會運作時異常nullPointException
String str1 =null;
str1.equals("hello");
2在數組通路中
當通路的數組下标越界時會報一個運作時異常,ArrayIndexOutOfBoundsException–數組通路越界異常
3在多态中
當父類引用需要調用子類填充方法時,需要向下轉型。但是向下轉型前需要先向上轉型,否則會發生運作時異常,ClassCastException–類型轉換異常
我們可以通過: 引用名 instanceof 類名 的傳回值來判斷該引用是否表示該類執行個體,進而判斷是否發生了向上轉型。
4在包裝類中
如果我們利用給基本數值類型的對應的包裝類中穿的類型不同則會發生運作時異常NumberFromatException
5當數學運算中比如10/0,除0操作就會引用數學運算異常。ArithmeticException
異常處理格式
文法:
try{
//可能出現異常的語句
}catch(異常類 異常對象){
//出現異常後進入catch,這裡是解決方案
}
finally{
//異常出口,這裡無論是否發生異常都會執行該finally中的代碼,即使try或者catch中出現return,依然會執行finally
}
以上是最全的。但是我們在書寫過程中可以有選擇的搭配try和catch或者finally。
throw throws用法
throws用在方法上,表示此方法中可能發生異常但是内部不處理,将異常抛給調用方,傳回後處理。
throw 用在方法中,用來用使用者自行産生異常類對象。
文法:
throw new Exception("對該方法描述");
舉個例子。
斷言
assert 布爾表達式 :“false的藐視”;
eg:assert num != 0 :“錯誤num不能為0”;
當斷言中的布爾表達式傳回false時,會抛出異常。
但是斷言需要手動開啟。運作時 java -ea //開啟斷言