黑馬程序員-java基礎 異常

---------------------- 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培訓 、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net/heima

發佈了32 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章