黑馬程序員-第八(異常)

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ----------------------

一,異常
1,定義 :就是程序運行時出現不正常情況 
2,異常的由來:問題是現實生活中一個具體的事物,也可以通過java的類的形式進行描述,並封裝成對象
其實就是java對不正常情況進行描述後的對象體現。
3,對問題的分類 :
·對於嚴重的問題:java通過Error類進行描述 
對Error一般不編寫針對性的代碼對其進行處理
·對於非嚴重的問題:java通過Exception類進行描述
對於Exception可以使用針對性的處理方式進行處理。
二,對異常的處理
 1,格式 :try{需要被檢測的代碼} catch(異常類 變量){處理異常的代碼(處理方式} finally{一定會執行的語句}
 2,異常類中常用的方法:
  ·String getMessage():獲取異常信息
  ·String toString();返回異常的簡短描述 異常名稱+異常信息
  ·void printStackTrace():打印堆棧中的跟蹤信息。異常名稱+異常信息+異常出現的位置 
  其實jvm默認的異常處理機制,就是在調用printStackTrace方法,打印堆棧內的跟蹤信息。
三,異常的聲明
1,throws :在功能上通過throws關鍵字聲明該功能可能會出現問題,
四,對多異常的處理:
1,聲明異常時,建議聲明更爲具體的異常,這樣處理的可以更具體。
2,對方聲明幾個異常,就對應有幾個catch塊,不要定義多餘的catch塊,如果多個catch塊中的異常出現繼承關係,父類異常catch塊放在最下面。
注:建議在進行catch處理時,catch中一定要定義具體處理方式,不要簡單定義一句e.printStackTrace()也不要簡單的就寫一個條輸出語句。

處理異常方式:1,用一個文件記錄下這些異常(稱異常日誌文件)


五,自定義異常
1,自定義異常只能通過throw手動拋出,java中的異常既可以手動拋出,也可以通過throws自動拋出
  2,當在函數內部出現了throw拋出異常對象,那麼就必須要給對應的處理動作:
  1,要麼在內部try catch處理
  2.要麼在函數上聲明讓調用者處理
  3,如何定義異常信息?
  因爲父類中已經把異常信息的操作都完成了,所以子類只要在構造時,將異常信息傳遞給父類通過spuer語句,那麼
  就可以直接通過getMessage()方法獲取自定義的異常信息。
 
  注:自定義異常必須繼承Exception
 
  4,繼承Exception原因:
  異常體系有一個特點:因爲異常在和異常對象都被拋出。他們都具備可拋性,這個可拋性是Throwable這個體系中獨有特點。
  只有這個體系中的類和對象纔可以被throws和trhow操作。
  5,注:自定義異常時,如果該異常的發生,無法在繼續進行運算,就讓自定義異常繼承RuntimeException
六,throws 和 throw 的區別:
1,throws:使用在函數上,throw:使用在函數內
2,throws:後面跟的是異常類,可以跟多個,用逗號隔開。throw:後面跟的是異常類的對象。
七,運行時異常(RuntimeException)
1,Exception中有一個特殊的子類異常RuntimeException運行時異常
2,如果在函數內容拋出該異常,函數上可以不用聲明,編譯一樣通過,如果在函數上聲明瞭該異常,調用者可以不用進行
處理,編譯一樣通過 。之所以不用在函數聲明,是因爲不需要讓調用者處理,當該異常發生,希望程序停止,因爲在運行時,出現了
無法繼續運算的情況 ,希望停止程序後,對代碼進行修改。
八,finally
1,finally 代碼塊:裏存放一定會執行的代碼。通常用於關閉資源。
注意:
1,finally中定義的通常是關閉資源代碼,因爲資源必須釋放 。
2,finally 只有一種情況不會執行,當執行到System.exit(0);finally不會執行。
九,異常在子父類覆蓋中的體現
1,子類在覆蓋父類時,如果父類的方法拋出異常,那麼子類的覆蓋方法,只能拋出父類的異常或者該異常的子類。如:
class AException extends Exception{
}
class BException extends AException{
}
class CException {
}
class Fu{
public void show(Fu fu)throws AException
{
}
}
class Zi{
publicvoid show(Fu fu)//些時子類中的show方法可以拋AException或BException異常。
{
}
}
class Demo{
public static void main(String[] args){
Zi zi = new Zi();
try{

zi.show(new Zi());
}
catch(只能寫父類中與show拋出的相同異常或者show拋出異常的父類。){

}

}
}
2,如果父類方法拋出多個異常,那麼子類在覆蓋該方法時,只能拋出父類異常的子集。
當上述程序父類的show方法拋出AException,BException兩個異常時,子類在複寫時,只能拋出AException,或BException或者兩個都拋
3,如果父類或者接口的方法中沒有異常的拋出,那麼子類在覆蓋方法時,也不可以拋出異常,如果
子類方法發生了異常,就必須要進行try處理,絕對不能拋。
當子類中的show 發了CException時,只能 在子類 中進行處理。
十,異常的好處:
1,將問題進行封裝,
2,裝飾正常流程代碼和問題處理代碼相分離,方便於閱讀。

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ----------------------

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