【不要問我爲什麼噹噹,突然21變22了。沒有跳過,因爲。。。前面。。】
【【【異常-總結】】】
異常:
異常是什麼,是對問題的描述,將問題進行對象的封裝。
----------------------------------------------------------------------------
異常【體系】:
Throwable
|--Error
|--Exception
|--RuntimeException
異常提示的【特點】:
異常體系中的所有類以及建立的對象都具備可拋性
也就是說可以被throw和throws關鍵字所操作
只有異常體系具備這個特點
----------------------------------------------------------------------------
【throws】和【throws】用法:
throws定義在函數內部,用於拋出異常對象
throws定義在函數上, 用於拋出異常類,可以拋出多個,用逗號隔開。
當函數內容throw拋出異常對象,並未進行try處理,必須在函數上聲明,否則編譯失敗。
注意,RuntimeException 異常除外,也就是說,如果函數內拋出的是RuntimeException異常,函數上可以不用聲明
----------------------------------------------------------------------------
如果函數聲明瞭異常,調用者需要進行處理,處理方法可以throws可以try
【異常有兩種】:
編譯時被檢測異常
該異常在編譯時,如果沒有處理(沒有拋,也沒有try)那麼編譯失敗
該異常被表示,代表這可以被處理
運行時異常(編譯時不檢測)
在編譯時,不需要處理,編譯器不檢查
該異常的發生,建議不處理,讓程序停止,需要對代碼進行修正。
----------------------------------------------------------------------------
異常處理的【語句】:
tyr
{
需要被檢測的代碼;
}
cath()
{
處理異常的代碼;
}
finally
{
一定會執行的代碼;
}
有三種結合方式:
1,try{}catch(){}
2, try{}catch(){}finally{}
3, try{}finally{}
注意:
1、finally 中定義的通常是關閉資源代碼,因爲資源必須釋放,,比如關閉數據庫
finally{} 是一定會被執行的,問:什麼情況不執行:
2、finally{只有一種情況不會執行,當執行到System.exit(0);的時候。(系統jvm退出)
----------------------------------------------------------------------------
【自定義異常】
定義類,繼承Exception 或者RuntimeException
1、爲了該自定義類具備可拋性
2、讓該類具備操作異常的共性方法。
當要定義自定義異常信息時,可以使用父類已經定義好的功能
將異常信息傳遞給父類的構造函數
class MyException extends Exception
{
MyException(String message)
{
super(message);
}
}
自定義異常:是按照java的面向對象思想程序中出現的特有問題進行封裝。
----------------------------------------------------------------------------
異常的好處:
1、講問題進行封裝。
2、將正常流程代碼和問題處理代碼相分離。方便閱讀。
異常的處理原則:
1、處理方式有兩種: try 和 hrows
2、調用出拋出異常的功能時候,拋出幾個,就處理幾個。
一個try 對應多個catch
3、多個catch,父類的catch往下放到最下面
4、catch內 需要定義針對性的處理方式,不要簡單的定義printStackTrace;也不要不寫。
當捕獲到的異常,本功能處理不了時,可以繼續在catch中拋出。
try
{
throw new AException();
}
cath(AException e)
{
throw e;//處理不了,就拋出去
}
如果該異常處理不了,但並不屬於該功能出現的異常,
可以將異常轉換後,拋出和該功能相關的異常
或者異常可以處理,當需要異常產生的和本功能相關的問題提供出去
當調用者知道,並處理,也可以將捕獲的異常處理後,轉換新的異常。
try
{
throw new AException();
}
cath(AException e)
{
//對 AException 的處理
throw BException;//拋出 相關的異常
}
(比如之前舉例說老師上課電腦冒煙了情況,電腦出問題了,把事情報告給校辦,
是換老師還是換電腦,處理好後,拋出處理就性了。
再比如,匯款不成功的例子)
異常的注意事項:
在父類覆蓋時:
1、子類拋出的異常必須是父類的異常的子類或者子集。
2、如果父類,或者接口沒有異常拋出時,子類覆蓋出現異常,只能try不能拋(原因就是子類的異常只能是父類中有的不能多)
參閱:
老師用電腦上課
圖形面積
--------------------------------------------------------------------------------------------------------------------------------------------------------
---------- android培訓、 java培訓、期待與您交流!----------
黑馬官網: http://edu.csdn.net/heima