關鍵字throw和throws的區別
void foo() throws FooException,Foo2Exception{
//other code
throw new FooException();
}
throw語句用在方法體內,表示拋出異常,由方法體內的語句處理。不能單獨使用,要么和try catch一起使用,要么和trows一起使用。
throws語句用在方法聲明后面,表示這個方法可能會拋出異常, 表示的是一種傾向、可能,但不一定實際發生。由調用這個方法的上一級方法中的語句來處理 。后面可以跟多個異常,中間用逗號分割。
例如:
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,則調用者也需要處理。