學(xué)習(xí)啦>知識(shí)大全>知識(shí)百科>百科知識(shí)>

Java中throw和throws的區(qū)別

時(shí)間: 映芳735 分享

  Java中有throw語(yǔ)句和throws語(yǔ)句,這兩種語(yǔ)句都是用來(lái)拋出異常的。那么,這兩種語(yǔ)句在具體運(yùn)行的時(shí)候又有哪些區(qū)別呢?下面小編帶你去了解一下。

  1.系統(tǒng)自動(dòng)拋出的異常

  所有系統(tǒng)定義的編譯和運(yùn)行異常都可以由系統(tǒng)自動(dòng)拋出,稱(chēng)為標(biāo)準(zhǔn)異常,并且 Java 強(qiáng)烈地要求應(yīng)用程序進(jìn)行完整的異常處理,給用戶(hù)友好的提示,或者修正后使程序繼續(xù)執(zhí)行。

  2.語(yǔ)句拋出的異常

  用戶(hù)程序自定義的異常和應(yīng)用程序特定的異常,必須借助于 throws 和 throw 語(yǔ)句來(lái)定義拋出異常。

  throw是語(yǔ)句拋出一個(gè)異常。

  語(yǔ)法:

  throw (異常對(duì)象);

  throw e;

  throws是方法可能拋出異常的聲明。用在聲明方法時(shí),表示該方法可能要拋出異常。

  語(yǔ)法:

  [(修飾符)](返回值類(lèi)型)(方法名)([參數(shù)列表])[throws(異常類(lèi))]{......}

  public void doA(int a) throws Exception1,Exception3{......}

  3.小編舉例

  throws E1,E2,E3只是告訴程序這個(gè)方法可能會(huì)拋出這些異常,方法的調(diào)用者可能要處理這些異常,而這些異常E1,E2,E3可能是該函數(shù)體產(chǎn)生的。

  throw則是明確了這個(gè)地方要拋出這個(gè)異常。

  如: void doA(int a) throws Exception1,Exception3{

  try{

  ......

  }catch(Exception1 e){

  throw e;

  }catch(Exception2 e){

  System.out.println("出錯(cuò)了!");

  }

  if(a!=b)

  throw new Exception3("自定義異常");

  }

  代碼塊中可能會(huì)產(chǎn)生3個(gè)異常,(Exception1,Exception2,Exception3)。

  如果產(chǎn)生Exception1異常,則捕獲之后再拋出,由該方法的調(diào)用者去處理。

  如果產(chǎn)生Exception2異常,則該方法自己處理了(即System.out.println("出錯(cuò)了!");)。所以該方法就不會(huì)再向外拋出Exception2異常了,void doA() throws Exception1,Exception3 里面的Exception2也就不用寫(xiě)了。

  而Exception3異常是該方法的某段邏輯出錯(cuò),程序員自己做了處理,在該段邏輯錯(cuò)誤的情況下拋出異常Exception3,則該方法的調(diào)用者也要處理此異常。

  throw語(yǔ)句用在方法體內(nèi),表示拋出異常,由方法體內(nèi)的語(yǔ)句處理。

  throws語(yǔ)句用在方法聲明后面,表示再拋出異常,由該方法的調(diào)用者來(lái)處理。

  throws主要是聲明這個(gè)方法會(huì)拋出這種類(lèi)型的異常,使它的調(diào)用者知道要捕獲這個(gè)異常。

  throw是具體向外拋異常的動(dòng)作,所以它是拋出一個(gè)異常實(shí)例。

  throws說(shuō)明你有那個(gè)可能,傾向。

  throw的話,那就是你把那個(gè)傾向變成真實(shí)的了。

  同時(shí):

  1、throws出現(xiàn)在方法函數(shù)頭;而throw出現(xiàn)在函數(shù)體。

  2、throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這些異常;throw則是拋出了異常,執(zhí)行throw則一定拋出了某種異常。

  3、兩者都是消極處理異常的方式(這里的消極并不是說(shuō)這種方式不好),只是拋出或者可能拋出異常,但是不會(huì)由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理。

Java中throw和throws的區(qū)別

Java中有throw語(yǔ)句和throws語(yǔ)句,這兩種語(yǔ)句都是用來(lái)拋出異常的。那么,這兩種語(yǔ)句在具體運(yùn)行的時(shí)候又有哪些區(qū)別呢?下面小編帶你去了解一下。 1.系統(tǒng)自動(dòng)拋出的異常 所有系統(tǒng)定義的編譯和運(yùn)行異常都可以由系統(tǒng)自動(dòng)拋出,稱(chēng)為標(biāo)準(zhǔn)異常,
推薦度:
點(diǎn)擊下載文檔文檔為doc格式

精選文章

  • Java中switch和if語(yǔ)句的區(qū)別
    Java中switch和if語(yǔ)句的區(qū)別

    switch和if語(yǔ)句都是Java的選擇語(yǔ)句,這兩種語(yǔ)句都是允許在程序運(yùn)行時(shí)控制程序的執(zhí)行過(guò)程。那么,switch和if在具體用法上什么具體區(qū)別,下面學(xué)習(xí)啦小編給

  • 如何實(shí)現(xiàn)真正的財(cái)務(wù)自由
    如何實(shí)現(xiàn)真正的財(cái)務(wù)自由

    相信很多人最想實(shí)現(xiàn)的就是財(cái)務(wù)自由吧,經(jīng)常教大家理財(cái),也是為了有一天大家靠理財(cái),投資產(chǎn)生的被動(dòng)收益能夠覆蓋掉自己的花費(fèi),過(guò)上不用早起上班,

  • Java中sleep與wait的區(qū)別
    Java中sleep與wait的區(qū)別

    Java中sleep和wait都是用來(lái)進(jìn)行線程控制的,這兩者之間有什么區(qū)別呢?下面,學(xué)習(xí)啦小編帶你去了解一下sleep與wait的區(qū)別。 sleep與wait在用法上的區(qū)別 sleep()不

  • 會(huì)計(jì)證丟了怎么辦補(bǔ)辦的方法
    會(huì)計(jì)證丟了怎么辦補(bǔ)辦的方法

    會(huì)計(jì)證,是具有一定會(huì)計(jì)專(zhuān)業(yè)知識(shí)和技能人員從事會(huì)計(jì)工作的資格證書(shū),是進(jìn)入會(huì)計(jì)崗位的準(zhǔn)入證。會(huì)計(jì)證丟了不用著急,不用擔(dān)心會(huì)重考。今天小編就給

537219