色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javaweb項目中如何優(yōu)雅的處理異常?

錢良釵2年前10瀏覽0評論

如果Java方法不能按照正常的流程執(zhí)行,那么可以通過另外一種途徑退出:拋出一個封裝了錯誤信息的對象,這個就是Java的異常;當(dāng)發(fā)生異常時,后面的代碼無法繼續(xù)執(zhí)行,而是由異常處理器繼續(xù)執(zhí)行。

01.異常的分類

Throwable是所有異常的超類,下一級可以分為Error和Exception:

1.Error

Error是指Java運行時系統(tǒng)內(nèi)部的錯誤,或者說它代表了JVM本身的錯誤,通常都是比較嚴(yán)重的錯誤,比如內(nèi)存溢出,虛擬機錯誤等等;

Error通常和硬件或JVM有關(guān),和程序本身無關(guān),所以不能被代碼捕獲和處理。

2.Exception

我們經(jīng)常說的異常是指Exception,又可以分成運行時異常和檢查異常。

RuntimeException:運行時異常,這類異常在編譯期間不強制代碼捕捉,但是可能在在JVM運行期間拋出異常;出現(xiàn)此類異常,通常是代碼的問題,所以需要修改程序避免這類異常。常見的運行時異常,比如:NullPointerException、ClassCastException等等。

CheckedException:檢查異常,這種異常發(fā)生在編譯階段,Java編譯器會強制代碼去捕獲和處理此類異常;比如:ClassNotFoundException、IllegalAccessException等等。

02.異常的處理方法

捕獲異常使用try...catch語句,把可能發(fā)生異常的代碼放到try{...}中,然后使用catch捕獲對應(yīng)的異常;

我們也可以在代碼塊中使用Throw向上級代碼拋出異常;

在方法中使用throws關(guān)鍵字,向上級代碼拋出異常;

03.Throw和throws的區(qū)別

Throw在方法內(nèi),后面跟著異常對象;而throws是用在方法上,后面跟異常類;

Throw會拋出具體的異常對象,當(dāng)執(zhí)行到Throw的時候,方法內(nèi)的代碼也就執(zhí)行結(jié)束了;throws用來聲明異常,提醒調(diào)用方這個方法可能會出現(xiàn)這種異常,請做好處理的準(zhǔn)備,但是不一定會真的出現(xiàn)異常。

04.如何優(yōu)雅地處理異常

  1. 不要試圖通過異常來控制程序流程,比如開發(fā)一個接口,正確的做法是對入?yún)⑦M(jìn)行非空驗證,當(dāng)參數(shù)為空的時候返回“參數(shù)不允許為空”,而不應(yīng)該捕捉到空指針的時候返回錯誤提示。

  2. 僅捕獲有必要的代碼,盡量不要用一個try...catch包住大段甚至整個方法內(nèi)所有的代碼,因為這樣會影響JVM對代碼進(jìn)行優(yōu)化,從而帶來額外的性能開銷。

  3. 很多程序員喜歡catch(Exceptione),其實應(yīng)該盡可能地精確地指出是什么異常。

  4. 不要忽略異常,捕捉到異常之后千萬不能什么也不做,要么在catch{...}中輸出異常信息,要么通過Throw或throws拋出異常,讓上層代碼處理。

  5. 盡量不要在catch{...}中輸出異常后,又向上層代碼拋出異常,因為這樣會輸出多條異常信息,而且它們還是相同的,這樣可能會產(chǎn)生誤導(dǎo)。

  6. 不要在finally{...}中寫return,因為try{...}在執(zhí)行return之前執(zhí)行finally{...},如果finally{...}中有return,那么將不再執(zhí)行try{...}中的return。

我將持續(xù)分享Java開發(fā)、架構(gòu)設(shè)計、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關(guān)注。