關(guān)鍵字throw和throws的區(qū)別
void foo() throws FooException,Foo2Exception{
//other code
throw new FooException();
}
throw語句用在方法體內(nèi),表示拋出異常,由方法體內(nèi)的語句處理。不能單獨(dú)使用,要么和try catch一起使用,要么和trows一起使用。
throws語句用在方法聲明后面,表示這個(gè)方法可能會拋出異常, 表示的是一種傾向、可能,但不一定實(shí)際發(fā)生。由調(diào)用這個(gè)方法的上一級方法中的語句來處理 。后面可以跟多個(gè)異常,中間用逗號分割。
例如:
void doA() throws Exception1, Exception3 {
try {
……
} catch(Exception1 e) {
throw e;
} catch(Exception2 e) {
System.out.println("出錯(cuò)了");
}
if (a != b)
throw new Exception3("自定義異常");
}
代碼塊……中可能產(chǎn)生異常Exception1、Exception2和Exception3。
如果產(chǎn)生Exception1異常,則捕捉了之后拋出由該方法的調(diào)用者去做處理;
如果產(chǎn)生Exception2異常,則該方法自己做了處理(打印出了說出錯(cuò)了),所以該方法就不會再向外拋出Exception2異常了,void doA() throws Exception1,,Excpetion3里面的Exception2也就不用寫了;
而Exception3異常是該方法的某段邏輯出錯(cuò),程序員自己作了處理在該段邏輯錯(cuò)誤的情況下拋出異常Exception3,則調(diào)用者也需要處理。