聲明檢查類型異常 throws
?? 概述:如果一個方法可能會出現(xiàn)異常遮糖,但我們不想使用try..catch 精準(zhǔn)捕捉處理異常,只想模糊處理狞膘,可以在方法聲明處用throws子句來聲明拋出異常揩懒。其實程序默認的報錯方式就是拋出。
?? 例如:如果我們需要讀取一份文件挽封,但是有可能讀取的文件不存在已球,或者內(nèi)容為空,所以我們需要告訴編譯器可能會出現(xiàn)FileNotFoundException類異常
public FileInputSteam(String name) throws FileNotFoundException辅愿,ArrayIndexOutOfBoundsException // 可以拋出多個異常
注意:子類拋出的異常必須與父類一致智亮,或者是父類異常的子類。
-
注意:throws 會將異常拋給調(diào)用的語句塊点待。比如 f1( )方法里面拋出了FileNotFoundException異常阔蛉,若 f2( )方法調(diào)用 f1( )方法,f2( )方法就得處理f1( )方法里面拋出的FileNotFoundException異常癞埠。前提是這個異常是 檢查型/運行時異常状原,非檢查型異常不報錯,因為非檢查型異常本身就默認有檢查方式拋出苗踪。
- 處理方式
- f2( )方法也拋出FileNotFoundException異常
- f2( )方法使用try..catch捕捉異常
- 處理方式
拋出異常 throw
??拋出異常很簡單颠区,拋出后就不用管了
- throw 將產(chǎn)生的異常拋出(強調(diào)的是動作),拋出的既可以是異常的引用通铲,也可以是異常對象毕莱。注意與 throws 的區(qū)別
- 首先要決定拋出什么異常,比如 throw new IOException
- 也可以是 var e = new IOException( ) ; throw e ;
創(chuàng)建自定義異常類
- 概述:如果遇到現(xiàn)有任何標(biāo)準(zhǔn)異常類都無法描述清楚的問題颅夺,這種情況下就需要創(chuàng)建一個屬于自己的異常類了朋截。
- 如何:我們要做的就是定義一個派生于Exception 的類,或者子類吧黄,比如IOException部服。
- 超類Throwable 的 toString 會返回字符串,很好用
- 創(chuàng)建異常類應(yīng)該包含兩個構(gòu)造器拗慨,一個是默認的構(gòu)造器饲宿,一個是包含詳細描述信息的構(gòu)造器厦酬。
//創(chuàng)建自定義異常類
class FileFormatException extend IOException{
public FileFormatException(){} // 默認的構(gòu)造器
public FileFormatException(String gripe){ // 詳細描述信息的構(gòu)造器
super(gripe);
}
}
// 拋出自定義異常類
String readData(Buffered in) throws FileFormatException{
......
while(...){
if (. . .){
throw new FileFormatException();
}
......
}
return ...;
}