Java中的throw和throws區(qū)別:
系統(tǒng)自動拋出的異常所有系統(tǒng)定義的編譯和運行異常都可以由系統(tǒng)自動拋出,稱為標(biāo)準(zhǔn)異常,并且 Java 強(qiáng)烈地要求應(yīng)用程序進(jìn)行完整的異常處理附井,給用戶友好的提示贿堰,或者修正后使程序繼續(xù)執(zhí)行愚战。
語句拋出的異常 用戶程序自定義的異常和應(yīng)用程序特定的異常,必須借助于 throws 和 throw 語句來定義拋出異常宗兼。
throw是語句拋出一個異常。語法:throw (異常對象); throw e;
throws是方法可能拋出異常的聲明孟岛。(用在聲明方法時瓶竭,表示該方法可能要拋出異常)語法:(修飾符)(方法名)([參數(shù)列表])[throws(異常類)]{......} public void doA(int a) throws Exception1,Exception3{......}
舉例:
throws E1,E2,E3只是告訴程序這個方法可能會拋出這些異常督勺,方法的調(diào)用者可能要處理這些異常,而這些異常E1斤贰,E2智哀,E3可能是該函數(shù)體產(chǎn)生的。throw則是明確了這個地方要拋出這個異常荧恍。
如: void doA(int a) throws Exception1,Exception3{ try{ ......
}catch(Exception1 e){ throw e; }catch(Exception2 e){ System.out.println("出錯了瓷叫!"); } if(a!=b) throw new Exception3("自定義異常");}
代碼塊中可能會產(chǎn)生3個異常,(Exception1,Exception2,Exception3)送巡。如果產(chǎn)生Exception1異常摹菠,則捕獲之后再拋出,由該方法的調(diào)用者去處理骗爆。如果產(chǎn)生Exception2異常次氨,則該方法自己處理了(即System.out.println("出錯了!");)摘投。所以該方法就不會再向外拋出Exception2異常了煮寡,void doA() throws Exception1,Exception3 里面的Exception2也就不用寫了。而Exception3異常是該方法的某段邏輯出錯犀呼,程序員自己做了處理幸撕,在該段邏輯錯誤的情況下拋出異常Exception3,則該方法的調(diào)用者也要處理此異常外臂。
throw語句用在方法體內(nèi)坐儿,表示拋出異常,由方法體內(nèi)的語句處理宋光。throws語句用在方法聲明后面貌矿,表示再拋出異常,由該方法的調(diào)用者來處理罪佳。
throws主要是聲明這個方法會拋出這種類型的異常站叼,使它的調(diào)用者知道要捕獲這個異常。throw是具體向外拋異常的動作菇民,所以它是拋出一個異常實例。
throws說明你有那個可能投储,傾向第练。throw的話,那就是你把那個傾向變成真實的了玛荞。
同時:1娇掏、throws出現(xiàn)在方法函數(shù)頭;而throw出現(xiàn)在函數(shù)體勋眯。2婴梧、throws表示出現(xiàn)異常的一種可能性下梢,并不一定會發(fā)生這些異常;throw則是拋出了異常塞蹭,執(zhí)行throw則一定拋出了某種異常孽江。3、兩者都是消極處理異常的方式(這里的消極并不是說這種方式不好)番电,只是拋出或者可能拋出異常岗屏,但是不會由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理漱办。