throw和throws
區別一:
throw 是語句拋出一個異常;throws 是方法拋出一個異常;
throw語法:throw <異常對象>
在方法聲明中,添加throws子句表示該方法將拋出異常。
throws語法:[<修飾符>]<返回值類型><方法名>([<參數列表>])[throws<異常類>]
其中:異常類可以聲明多個,用逗號分割。
區別二:
throws可以單獨使用,但throw不能;
區別三:
throw要麽和try-catch-finally語句配套使用,要麽與throws配套使用。但throws可以單獨使 用,然後再由處理異常的方法捕獲。
throws E1,E2,E3 只是告訴程序這個方法可能會拋出這些個異常,方法的調用者可能要處理這些異常。而這些異常E1,E2,E3可能是該函數體產生的。
而throw是明確之處這個地方要拋出這個異常。
void doA() throws Exception1, Exception3
{
try { ……
}
catch(Exception1 e)
{
throw e;
}
catch(Exception2 e)
{
System.out.println("出錯了");
}
if (a != b)
throw new Exception3("自定義異常");
}
代碼塊……中可能產生異常Exception1、Exception2和Exception3。 如果產生Exception1異常,
則捕捉了之後拋出由該方法的調用者去做處理; 如果產生Exception2異常,則該方法自己做了處理(打印出了說出錯了),
所以該方法就不會再向外拋出Exception2異常了,void doA() throws Exception1,,Excpetion3裏面的Exception2也就不用寫了;
而Exception3異常是該方法的某段邏輯出錯,程序員自己作了處理在該段邏輯錯誤的情況下拋出異常Exception3,則調用者也需要處理。
throw語句用在方法體內,表示拋出異常,由方法體內的語句處理 throws語句用在方法聲明後面,表示再拋出異常,由調用這個方法的上一級方法中的語句來處理
throws主要是聲明這個方法會拋出這種類型的異常,使其他地方調用它時知道要捕獲這個異常。 throw是具體向外拋異常的動作,所以它是拋出一個異常實例。
throws說明你有哪個可能,傾向 throw的話,那就是你把那個傾向變成真實的了
同時:
1)throws出現在方法函數頭;而throw出現在函數體;
2)throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是拋出了異常,執行throw則一定拋出了某種異常;
3)兩者都是消極處理異常的方式(這裏的消極並不是說這種方式不好),只是拋出或者可能拋出異常,但是不會由函數去處理異常,真正的處理異常由函數的上層調用處理。
throw和throws