1. 程式人生 > >throw和throws

throw和throws

int 出現異常 程序員 代碼 產生 修飾符 exc 數列 new

區別一:
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