異常:程序中導致程序中斷的一種指令流。
異常分爲Error和Exception異常,他們都是Throwable的子類。
•Error:指的是JVM錯誤,這時的程序並沒有執行,無法處理;(並沒有執行,用戶很難處理)
•Exception:指的是程序運行中產生的異常,用戶可以使用異常格式處理。(運行中,用戶可自行處理)
使用異常處理的好處:可以維持程序的穩定性和可靠性。
Java的異常處理主要依賴於try、catch、finally、throws和throw五個關鍵字。
try、catch、finally:try裏放可能發生異常的代碼,catch用於捕捉並處理try塊中的異常,finally表示不管是否有出現異常,都統一執行的代碼。
try{
//
}catch(異常類型1 異常的變量名1){
//
}catch(異常類型2 異常的變量名2){
//
}finally{
//
}
說明:
finally中最後不要有返回值。
catch中:
catch(Exception e){
e.printStackTrace();}
printStackTrace()是所有異常類中都會提供的方法,Exception是表示能夠處理所有異常類型。
throws、throw的區別:
•throws:在方法的聲明上使用(方法頭),表示此方法在調用時必須處理異常。(有throws必須加上try、catch)
•throw:在方法中(方法體)人爲拋出一個異常類對象(手工調用異常類的構造方法,這個異常類對象可能是自己實例化或者是拋出已存在的)
在主方法上使用throws:表示此異常產生後直接通過主方法拋出,代碼中可以不強制使用異常處理。
RuntimeException(運行時異常):不會強制要求我們處理異常,可以讓我們有選擇性的處理,但是如果沒有處理又發生了異常,就交給JVM默認處理。
RuntimeException的繼承關係:
java.lang.Object
|java.lang.Throwable
|java.lang.Exception
|java.lang.RuntimeException
RuntimeException和Exception的區別:
前者是後者的子類;Exception定義了必須處理的異常,而RuntimeException定義的異常可以選擇性的處理。
常見的RuntimeException:
NullPointerException(空指針異常)、
NumberFormatException(數字轉換異常)、
ClassCaseException(強制轉換異常)、
ArrayIndexOutOfBoundException(數組越界異常)
自定義異常:只需要繼承Exception(強制性處理)或RuntimeException(選擇性處理),然後在程序中使用throw進行異常對象的拋出。
定義MyException:
class MyException extends Exception {
public MyException(String i){
super(i);
}
}
public class Test11 {
public static void main(String[] args) {
int num = 6;
try{
if(num<10){
throw new MyException("傳遞的數值應大於10");
}
}catch(Exception e ){
e.printStackTrace();
}
}
}
什麼時候使用自定義異常:當你發現你想說明的異常情況沒有時,就自行創建。