---------------------- android培訓 、java培訓 、期待與您交流! ----------------------
異常: 異常就是程序在運行時出現的不正常情況。
異常的由來: 問題也是現實生活中的一個具體事物,也可以通過java的類的形式進行描述。並封裝成對象。其實就是java對不正常情況
進行描述後的對象體現。
異常分爲兩種:一種是嚴重的問題(Error) 一種是非嚴重問題(Exception)。
對於Error,java通過Erroe進行描述,一般不進行針對性處理。
對於Exception java實用針對性的處理方式進行處理
異常的處理格式:
try{
需要處理的代碼
}
catch(){
處理異常,可以和try語句單獨存在 如果沒有catch代表異常沒有被處理過,如果該異常是檢測時異常,那麼必須聲明
}
finally{
一定會執行的語句,可以和try單獨存在
}
對多異常的處理:
1 聲明異常時 建議聲明更爲具體的異常
2 對方聲明一個異常,有應該有幾個catch 塊,如果多個catch快中的異常出現繼承關係,父類異常catch塊放最後面面
自定義異常:
因爲項目中出現一些特有的問題,這些問題並未被java所描述並進行封裝。所以我們可以對這些特有的問題,按照java對問題封裝的思想對特有的問題進行自定義封裝。
當在函數內部出現了throw拋出異常對象,那麼就必須要給對應的處理動作。一般情況,在函數類出現異常,函數上要聲明
如何自定義異常信息:
因爲父類中已經把異常信息的操作都完成了,所以子類在構造時,將異常信息通過super語句傳遞給父類。
那麼就可以通過getMessger方法獲得自定義的異常信息
自定義異常必須繼承Exception因爲異常和異常對象都被拋出,他們都具有可拋性。這是Throwable這個體系中獨有特點,只有在這個體系中的類和對象剛纔可以被throws和throw操作
throws 和throw的區別
1 throws 使用在函數上 throw用在函數類
2 throws 拋出異常類 ,多個異常類用逗號隔開 。throw拋出的是異常對象
RuntimeException 運行時異常:
如果在函數內容拋出該異常,函數上可以不用聲明,編譯能通過
如果在函數上聲明該異常,調用者可以不進行處理,編譯一樣通過。
之所以不用在函數聲明,是因爲不需要讓調用者處理,當該異常發生,希望程序停止,因爲在運行時,出現了無法運算的情況,希望停止運行後,調用者對程序進行修正。
自定義異常時:如果希望該異常發生,無法繼續進行運算,就繼承RuntimeException
異常還可以分爲:1編譯時期被檢測的異常 2 編譯時期不被檢測的異常(RuntimeException及其子類)
finally : finally裏面的語句都會被執行,即使在catch裏面return;也會被執行
異常在子父類覆蓋中的體現:
1 子類在覆蓋父類時,如果父類的方法拋出異常,那麼子類覆蓋方法,只能拋出父類的異常或者該異常的子類
2 如果父類方法拋出多個異常,子類在覆蓋方法時只能拋出父類異常的子集
3 如果父類或者接口的方法中沒有異常拋出,那麼子類覆蓋方法時,也不可以拋出異常。如果子類發生了異常,就必須進行try處理,絕對不能繼續拋出異常
//自定義異常 繼承Exception類
public class FushuExec extends Exception{
//因爲父類一構造好異常信息,所以通過子類構造方法通過super把信息傳給父類,就可以通過getMessage獲得自定義信息
FushuExec(String msg){
super(msg);
}
}
public class Exce {
public int shang(int a ,int b) throws FushuExec {//聲明可能會出現異常,調用這個方法的時候要麼繼續拋出異常 要麼處理。
if(b<0){
throw new FushuExec("b不能是負數");//通過throw拋出自定義異常對象,需要處理或繼續拋出
}
return a/b;
}
}
public class Test {
public static void main(String[] args) {
Exce exec = new Exce();
try {
exec.shang(3, -9);
} catch (FushuExec e) {
System.out.println(e.toString());//toString();自動調用getMessage方法
}
finally{
System.out.println("無論怎麼樣都會執行");//finally裏面的代碼無論怎麼樣都會執行,即使在catch裏面 輸入return;
}
System.out.println("結束");
}
}
---------------------- android培訓 、java培訓 、期待與您交流! ----------------------