異常
Java把異常當作對象來處理
異常結構
Throwable是所有異常的根,java.lang.Throwable
Error是錯誤,java.lang.Error
Exception是異常,java.lang.Exception
異常分類
Exception異常分爲兩大類
a) Checked exception(非運行時異常) (非 RuntimeException,Error)
如IO異常
b) Unchecked exception(運行時異常)(RuntimeException,Error)
如數組越界、空指針等
Java中所有的異常類都會直接或間接地繼承自Exception。
RuntimeException類也是直接繼承自Exception類,它叫做運行時異常,Java中所有
的運行時異常都會直接或間接地繼承自RuntimeException。
Java 中凡是繼承自Exception而不是繼承自RuntimeException的類都是非運行時異
常。
異常處理
第一種是使用try.. catch…finally 進行捕獲;
第二種是在調用該會產生異常的方法所在的方法聲明throws Exception
b)對於運行時異常(runtime exception),我們可以不對其進行處理,也可以對其進行
處理。推薦不對其進行處理。
try{
} catch(Exception e) {
} finally {
}
無論程序是否出現異常,finally 塊中的代碼都是會被執行的。
如果try 塊中存在return 語句,那麼首先也需要將finally 塊中的代碼執行完畢,然
後方法再返回。
如果try 塊中存在System.exit(0)語句,那麼就不會執行finally 塊中的代碼,因爲
System.exit(0)會終止當前運行的Java虛擬機,程序會在虛擬機終止前結束執行。
catch塊之後,這樣才能保證後續的catch可能被執行,否則子類型的catch將永遠
無法到達,Java 編譯器會報編譯錯誤;如果多個catch 塊的異常類型是獨立的
(MyException, MyException2), 那麼誰前誰後都是可以的。
自定義異常
一個自定義異常類。通常情況下,我們都會直接繼承自Exception類,一般不會繼承
某個運行時的異常類。
class ChushulingException extends Exception{
public ChushulingException(String msg){
super(msg);
}
}
class ChushufuException extends Exception{
public ChushufuException(String msg){
super(msg);
}
}
/*自定義異常 End*/
class Numbertest{
public int shang(int x,int y) throws ChushulingException,ChushufuException{
if(y<0){
throw new ChushufuException("您輸入的是"+y+",規定除數不能爲負數!");//拋出異常
}
if(y==0){
throw new ChushulingException("您輸入的是"+y+",除數不能爲0!");
}
int m=x/y;
return m;
}
}