新聞中心
“二哥,你能告訴我 throw 和 throws 兩個(gè)關(guān)鍵字的區(qū)別嗎?”三妹問(wèn)。

創(chuàng)新互聯(lián)建站專注于承德企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站制作。承德網(wǎng)站建設(shè)公司,為承德等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
“throw 關(guān)鍵字,用于主動(dòng)地拋出異常;正常情況下,當(dāng)除數(shù)為 0 的時(shí)候,程序會(huì)主動(dòng)拋出 ArithmeticException;但如果我們想要除數(shù)為 1 的時(shí)候也拋出 ArithmeticException,就可以使用 throw 關(guān)鍵字主動(dòng)地拋出異常。”我說(shuō)。
- throw new exception_class("error message");
語(yǔ)法也非常簡(jiǎn)單,throw 關(guān)鍵字后跟上 new 關(guān)鍵字,以及異常的類型還有參數(shù)即可。
舉個(gè)例子。
- public class ThrowDemo {
- static void checkEligibilty(int stuage){
- if(stuage<18) {
- throw new ArithmeticException("年紀(jì)未滿 18 歲,禁止觀影");
- } else {
- System.out.println("請(qǐng)認(rèn)真觀影!!");
- }
- }
- public static void main(String args[]){
- checkEligibilty(10);
- System.out.println("愉快地周末..");
- }
- }
這段代碼在運(yùn)行的時(shí)候就會(huì)拋出以下錯(cuò)誤:
- Exception in thread "main" java.lang.ArithmeticException: 年紀(jì)未滿 18 歲,禁止觀影
- at com.itwanger.s43.ThrowDemo.checkEligibilty(ThrowDemo.java:9)
- at com.itwanger.s43.ThrowDemo.main(ThrowDemo.java:16)
“throws 關(guān)鍵字的作用就和 throw 完全不同。”我說(shuō),“異常處理機(jī)制這小節(jié)中講了 checked exception 和 unchecked exception,也就是檢查型異常和非檢查型異常;對(duì)于檢查型異常來(lái)說(shuō),如果你沒(méi)有做處理,編譯器就會(huì)提示你。”
Class.forName() 方法在執(zhí)行的時(shí)候可能會(huì)遇到 java.lang.ClassNotFoundException 異常,一個(gè)檢查型異常,如果沒(méi)有做處理,IDEA 就會(huì)提示你,要么在方法簽名上聲明,要么放在 try-catch 中。
“那什么情況下使用 throws 而不是 try-catch 呢?”三妹問(wèn)。
“假設(shè)現(xiàn)在有這么一個(gè)方法 myMethod(),可能會(huì)出現(xiàn) ArithmeticException 異常,也可能會(huì)出現(xiàn) NullPointerException。這種情況下,可以使用 try-catch 來(lái)處理?!蔽一卮?。
- public void myMethod() {
- try {
- // 可能拋出異常
- } catch (ArithmeticException e) {
- // 算術(shù)異常
- } catch (NullPointerException e) {
- // 空指針異常
- }
- }
“但假設(shè)有好幾個(gè)類似 myMethod() 的方法,如果為每個(gè)方法都加上 try-catch,就會(huì)顯得非常繁瑣。代碼就會(huì)變得又臭又長(zhǎng),可讀性就差了。”我繼續(xù)說(shuō)。
“一個(gè)解決辦法就是,使用 throws 關(guān)鍵字,在方法簽名上聲明可能會(huì)拋出的異常,然后在調(diào)用該方法的地方使用 try-catch 進(jìn)行處理?!?/p>
- public static void main(String args[]){
- try {
- myMethod1();
- } catch (ArithmeticException e) {
- // 算術(shù)異常
- } catch (NullPointerException e) {
- // 空指針異常
- }
- }
- public static void myMethod1() throws ArithmeticException, NullPointerException{
- // 方法簽名上聲明異常
- }
“好了,我來(lái)總結(jié)下 throw 和 throws 的區(qū)別,三妹,你記一下?!?/p>
1)throws 關(guān)鍵字用于聲明異常,它的作用和 try-catch 相似;而 throw 關(guān)鍵字用于顯式的拋出異常。
2)throws 關(guān)鍵字后面跟的是異常的名字;而 throw 關(guān)鍵字后面跟的是異常的對(duì)象。
示例。
- throws ArithmeticException;
- throw new ArithmeticException("算術(shù)異常");
3)throws 關(guān)鍵字出現(xiàn)在方法簽名上,而 throw 關(guān)鍵字出現(xiàn)在方法體里。
4)throws 關(guān)鍵字在聲明異常的時(shí)候可以跟多個(gè),用逗號(hào)隔開;而 throw 關(guān)鍵字每次只能拋出一個(gè)異常。
“三妹,這下子清楚了吧?”我抬抬頭,看了看三妹說(shuō)。
“好的,二哥,這下徹底記住了,你真棒!”
本文轉(zhuǎn)載自微信公眾號(hào)「沉默王二」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系沉默王二公眾號(hào)。
分享標(biāo)題:教妹學(xué) Java :Throw 和 Throws
URL分享:http://m.5511xx.com/article/cdohhso.html


咨詢
建站咨詢
