好程式設計師Java培訓分享Java處理異常的幾個小知識
好程式設計師Java 培訓分享 Java 處理異常的幾個小知識, 如果 Java 方法不能按照正常的流程執行,那麼可以透過另外一種途徑退出:丟擲一個封裝了錯誤資訊的物件,這個就是 Java 的異常 ; 當發生異常時,後面的程式碼無法繼續執行,而是由異常處理器繼續執行。
一、異常的分類
Throwable 是所有異常的超類,下一級可以分為 Error 和 Exception :
1. Error
Error 是指 Java 執行時系統內部的錯誤,或者說它代表了 JVM 本身的錯誤,通常都是比較嚴重的錯誤,比如記憶體溢位 , 虛擬機器錯誤等等 ;Error 通常和硬體或 JVM 有關,和程式本身無關,所以不能被程式碼捕獲和處理。
2. Exception
我們經常說的異常是指Exception ,又可以分成執行時異常和檢查異常。
RuntimeException :執行時異常,這類異常在編譯期間不強制程式碼捕捉,但是可能在在 JVM 執行期間丟擲異常 ; 出現此類異常,通常是程式碼的問題,所以需要修改程式避免這類異常。常見的執行時異常,比如: NullPointerException 、 ClassCastException 等等。
CheckedException :檢查異常,這種異常發生在編譯階段, Java 編譯器會強制程式碼去捕獲和處理此類異常 ; 比如: ClassNotFoundException 、 IllegalAccessException 等等。
二、異常的處理方法
捕獲異常使用 try...catch 語句,把可能發生異常的程式碼放到 try {...} 中,然後使用 catch 捕獲對應的異常 ; 我們也可以在程式碼塊中使用 Throw 向上級程式碼丟擲異常 ; 在方法中使用 throws 關鍵字,向上級程式碼丟擲異常 ;
三、Throw 和 throws 的區別
Throw 在方法內,後面跟著異常物件 ; 而 throws 是用在方法上,後面跟異常類 ;
Throw 會丟擲具體的異常物件,當執行到 Throw 的時候,方法內的程式碼也就執行結束了 ;throws 用來宣告異常,提醒呼叫方這個方法可能會出現這種異常,請做好處理的準備,但是不一定會真的出現異常。
四、使用Exception 的一些建議
1. 不要試圖透過異常來控制程式流程,比如開發一個介面,正確的做法是對入參進行非空驗證,當引數為空的時候返回“引數不允許為空”,而不應該捕捉到空指標的時候返回錯誤提示。
2. 僅捕獲有必要的程式碼,儘量不要用一個 try...catch 包住大段甚至整個方法內所有的程式碼,因為這樣會影響 JVM 對程式碼進行最佳化,從而帶來額外的效能開銷。
3. 很多程式設計師喜歡 catch(Exception e) ,其實應該儘可能地精確地指出是什麼異常。
4. 不要忽略異常,捕捉到異常之後千萬不能什麼也不做,要麼在 catch{...} 中輸出異常資訊,要麼透過 Throw 或 throws 丟擲異常,讓上層程式碼處理。
5. 儘量不要在 catch{...} 中輸出異常後,又向上層程式碼丟擲異常,因為這樣會輸出多條異常資訊,而且它們還是相同的,這樣可能會產生誤導。
6. 不要在 finally{...} 中寫 return ,因為 try{...} 在執行 return 之前執行 finally{...} ,如果 finally{...} 中有 return ,那麼將不再執行 try{...} 中的 return 。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2704646/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Python培訓分享Python異常處理程式設計師Python
- 好程式設計師Java培訓分享Java基礎知識總結程式設計師Java
- 好程式設計師Python培訓分享Python程式設計中常見的異常處理程式設計師Python
- 好程式設計師Java培訓分享JDK工具條知識點程式設計師JavaJDK
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享Java效能常見命令有哪些程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓教程分享MySQL索引最佳化知識梳理程式設計師JavaMySql索引
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享Spring Ioc的原理程式設計師JavaSpring
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- 好程式設計師Java培訓分享學Java程式設計要注意什麼程式設計師Java
- 好程式設計師Java培訓分享面試Java的注意事項程式設計師Java面試
- 好程式設計師Java培訓分享Java集合的兩種排序方法程式設計師Java排序
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享SpringBoot入門篇程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師Java教程分享幾個流行的Java框架程式設計師Java框架
- 好程式設計師Java培訓分享Java常見排序演算法之插入排序程式設計師Java排序演算法
- 好程式設計師Java培訓分享Java多執行緒常見面試問題程式設計師Java執行緒面試
- 好程式設計師Java培訓分享Java類載入的過程概述程式設計師Java
- 好程式設計師Java培訓分享Java的三大框架怎麼學?程式設計師Java框架
- 好程式設計師web前端培訓分享JavaScript相關知識程式設計師Web前端JavaScript
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java培訓分享Java面試題集合篇二程式設計師Java面試題