所有的異常都有一個超類throwable; throwable有兩個子類:Exception和error(一般在重大錯誤,不能夠自行恢復); Exception有兩個子類:checked和runtime exception異常; checked:檢查時異常,就是程式代碼有的錯誤會有紅色波浪線的異常, ...
所有的異常都有一個超類throwable;
throwable有兩個子類:Exception和error(一般在重大錯誤,不能夠自行恢復);
Exception有兩個子類:checked和runtime exception異常;
checked:檢查時異常,就是程式代碼有的錯誤會有紅色波浪線的異常,在運行之前會提示出來;
runtime exception:運行時有錯誤會報出的異常如空指針異常和下標越界異常;
進行異常處理有以下兩個方法:
1、使用try{} catch(異常種類){}
try 裡面一般是一整個功能在一起,有時候需要自己進行判斷,有時是程式會自動提示需要加上try.....catch進行處理。
如下麵的代碼:
int a=3;
int b=0;
System.out.println(a/b);
System.out.println("除法運算");
會產生異常:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at anli.f.main(f.java:7)
這個時候如果不處理會報出如下異常,是虛擬機自動處理之後程式終止,後面的程式就不在執行,如果不想程式就此終止可以加上try...catch進行處理;
try {
int a = 3;
int b = 0;
System.out.println(a / b);
} catch (Exception e) {
// TODO: handle exception
System.out.println("除數不能為0!");
}
System.out.println("除法運算");
輸出結果:
除數不能為0!
除法運算
另外還有一種模式:try....catch....finally;不管是否會發生異常都會處理finally的代碼塊除非用system.exist(0)進行了處理;
示例如下:
try {
int a = 3;
int b = 0;
System.out.println(a / b);
} catch (Exception e) {
// TODO: handle exception
System.out.println("除數不能為0!");
}finally {
System.out.println("finally代碼塊");
}
System.out.println("除法運算");
結果:
除數不能為0!
finally代碼塊
除法運算
註意:try可以和catch或者finally分別使用,但是不能單獨使用
2、throws和throw;
throws:拋出異常聲明,說明有異常,但不進行處理。拋出異常讓程式的調用者進行處理,如果一直都不進行try....catch處理就會最終交給虛擬機處理;
throw:拋出一個異常,一般用於拋出一個新的異常或者自定義異常;
用法實例:
public void div(int a,int b) throws Exception{
if(b==0){
throw new Exception("除數不能為零");
}
System.out.println(a/b);
}
f fm=new f();
int a=4;
int b=0;
try {
fm.div(a, b);
} catch (Exception e) {
// TODO Auto-generated catch block
e.getMessage();//獲取異常信息可以有這個和下麵一行的方法;
e.printStackTrace();
}
System.out.println("除法運算");
結果:
java.lang.Exception: 除數不能為零
at anli.f.div(f.java:21)
at anli.f.main(f.java:10)
除法運算
註意:可以使用多重try....catch........catch;
子類異常在前面,父類異常在後面,一般最後的異常一般是exception;
3、自定義異常類;
可以自定義一個異常繼承一個異常類,如exception或者runtime exception;
在使用的時候需要使用throw 拋出一個自定義異常;
如定義一個 AgeException extends Exception{
裡面需要繼承父類的構造方法,可以自定義生成;
};
在使用的時候只需要在在throw時拋出:
throw new AgeException("除數不能為零");
把上面的代碼throw new exception改為上面代碼,最後會拋出Age Exception;
4、throw和throws的區別:
a. 作用不同,throws是聲明異常,throw是拋出異常;
b.作用位置不同,throws是在類後面聲明,可以聲明拋出多個異常,throw是拋出一個異常對象;
c.定義字眼不同;