日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学

發布時間:2023/12/4 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來源:Lrwinlrwinx.github.io/2016/04/28/如何優雅的設計java異常/

導語

異常處理是程序開發中必不可少操作之一,但如何正確優雅的對異常進行處理確是一門學問,筆者根據自己的開發經驗來談一談我是如何對異常進行處理的。

由于本文只作一些經驗之談,不涉及到基礎知識部分,如果讀者對異常的概念還很模糊,請先查看基礎知識。

如何選擇異常類型

異常的類別

正如我們所知道的,java中的異常的超類是java.lang.Throwable(后文省略為Throwable),它有兩個比較重要的子類,java.lang.Exception(后文省略為Exception)和java.lang.Error(后文省略為Error),其中Error由JVM虛擬機進行管理,如我們所熟知的OutOfMemoryError異常等,所以我們本文不關注Error異常,那么我們細說一下Exception異常。

Exception異常有個比較重要的子類,叫做RuntimeException。我們將RuntimeException或其他繼承自RuntimeException的子類稱為非受檢異常(unchecked Exception),其他繼承自Exception異常的子類稱為受檢異常(checked Exception)。本文重點來關注一下受檢異常和非受檢異常這兩種異常。

如何選擇異常

從筆者的開發經驗來看,如果在一個應用中,需要開發一個方法(如某個功能的service方法),這個方法如果中間可能出現異常,那么你需要考慮這個異常出現之后是否調用者可以處理,并且你是否希望調用者進行處理,如果調用者可以處理,并且你也希望調用者進行處理,那么就要拋出受檢異常,提醒調用者在使用你的方法時,考慮到如果拋出異常時如果進行處理,相似的,如果在寫某個方法時,你認為這是個偶然異常,理論上說,你覺得運行時可能會碰到什么問題,而這些問題也許不是必然發生的,也不需要調用者顯示的通過異常來判斷業務流程操作的,那么這時就可以使用一個RuntimeException這樣的非受檢異常.

好了,估計我上邊說的這段話,你讀了很多遍也依然覺得晦澀了。

那么,請跟著我的思路,在慢慢領會一下。

什么時候才需要拋異常

首先我們需要了解一個問題,什么時候才需要拋異常?異常的設計是方便給開發者使用的,但不是亂用的,筆者對于什么時候拋異常這個問題也問了很多朋友,能給出準確答案的確實不多。其實這個問題很簡單,如果你覺得某些”問題”解決不了了,那么你就可以拋出異常了。比如,你在寫一個service,其中在寫到某段代碼處,你發現可能會產生問題,那么就請拋出異常吧,相信我,你此時拋出異常將是一個最佳時機。

應該拋出怎樣的異常

了解完了什么時候才需要拋出異常后,我們再思考一個問題,真的當我們拋出異常時,我們應該選用怎樣的異常呢?究竟是受檢異常還是非受檢異常呢(RuntimeException)呢?我來舉例說明一下這個問題,先從受檢異常說起,比如說有這樣一個業務邏輯,需要從某文件中讀取某個數據,這個讀取操作可能是由于文件被刪除等其他問題導致無法獲取從而出現讀取錯誤,那么就要從redis或mysql數據庫中再去獲取此數據,參考如下代碼,getKey(Integer)為入口程序.

public String getKey(Integer key){ String value; try { InputStream inputStream = getFiles("/file/nofile"); //接下來從流中讀取key的value指 value = ...; } catch (Exception e) { //如果拋出異常將從mysql或者redis進行取之 value = ...; }} public InputStream getFiles(String path) throws Exception { File file = new File(path); InputStream inputStream = null; try { inputStream = new BufferedInputStream(new FileInputStream(file)); } catch (FileNotFoundException e) { throw new Exception("I/O讀取錯誤

總結

以上是生活随笔為你收集整理的受检异常 非受检异常_这样设计 Java 异常更优雅,赶紧学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。