1、例外:就是程式運行時出現不正常情況
例外由來:問題也是現實生活中一個具體的事物,也可以通過java的類的形式進行描述,并封裝成物件,其實就是java對不正常情況進行描述后的物件體現,
對于問題的劃分(兩種):一種是嚴重的問題,一種是非嚴重的問題;
對于嚴重的,java通過Error類進行描述,
對于Error一般不撰寫針對性的代碼對其進行撰寫
對于非嚴重的,java通過Exception類進行描述,
對于Exception可以使用針對性的處理方式進行處理
無論Error還是Exception都具有一些共性內容
Throwable
- |-Error
- |-Exception
—— |-RuntimeException
2、例外的處理
java 提供了特有陳述句進行處理,
try{
需要被檢測的代碼
}
catch(例外類 變數){
處理例外的代碼,處理方式
}
finally{
一定會執行的陳述句
}
3、對捕獲到的例外物件常見方法操作
String getMessage( ):捕獲例外資訊,
在函式上宣告,讓呼叫出進行處理,不處理則編譯失敗,
對多例外的處理
1、宣告例外時,建議宣告更為具體,這樣處理的可以更具體,
2、對方宣告幾個例外,就對應有幾個catch塊,不要定義多余的catch塊,
如果多個catch塊中的例外出現繼承關系,父類例外catc塊放在最下面,
建議:
在進行catch處理時,catch中一定要定義具體處理方式,也不要簡單的就寫一條輸出陳述句,
<自定義例外>
當在函式內部出現了throw拋出例外物件,那么就必須要給對應的處理動作:
要么在內部try catch處理,要么在函式上宣告讓呼叫者處理,
一般情況在函式內部出現例外,函式上需要宣告,
發現列印的結果中只有例外的名稱,卻沒有例外的資訊,那么如何定義例外資訊呢?
因為父類中已經把例外資訊的操作都完成了,所以子類只要在構造時,將例外資訊傳遞給父類通過super陳述句,那么
就可以直接通過getMessage方法獲取自定義的例外資訊,
自定義例外:
定義類繼承Exception或者RuntimeException
1、為了讓該類自定義類具備可拋性,
2、讓該類具備操作例外的共性方法,
當要定義自定義例外的資訊時,可以使用父類已經定義好的功能,
class MyException extends Exception
{
MyException(String message)
{
super(message);
}
}
throw和throws的區別:throw使用在函式上,throws使用在函式內,throws后面跟的例外類,可以跟多個,用“ ,”隔開
throw后跟的是例外物件,
當函式內容有throw拋出例外物件,并未進行try處理,必須要在函式上宣告,都在編譯失敗,
注意:RuntimeException除外,也就是說,函式內如果拋出的RuntimeException例外,函式可以不用宣告,
如果函式宣告了例外,呼叫者需要進行處理,處理方法可以throws,可以try,
finaly{ } //存放的是一定對被執行的代碼 通常用于關閉資源,finally中定義的通常是 關閉資源代碼,因為資源必須釋放,
finally只有一種情況不會執行,當執行到System.exit(0);finally不會執行,
例外處理陳述句:
1、
try
{
需要被檢測的代碼;
}
catch( )
{
處理例外的代碼;
}
2、
try
{
}
finally
{
}
3、
try
{
需要被檢測的代碼;
}
catch( )
{
處理例外的代碼;
}
finally
{
一定會執行的代碼;
}
例外的好處:1、將問題進行封裝
2、將正常流程代碼和問題處理代碼相分離,方便于閱讀,
例外的處理原則:
1、處理方式有兩種:try 或者throws;
2、呼叫到拋出例外的功能時,拋出幾個,就處理幾個,
一個try對應多個catch,
3、多個catch,父類的catch放到最下面,
4、catch內,需要定義針對性的處理方式,不要簡單的定義printStackTrace,輸出陳述句,
try{
throw new AException( );
}
catch( AException e){
throw e;
}
例外的注意事項:
在子父類覆寫時:
1、子類拋出的例外必須是父類的例外的子類或者子集;
2、如果父類或者介面沒有例外拋出時,子類覆寫出現例外,只能try不能拋,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/200438.html
標籤:其他
