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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

简化Java中的异常处理

發(fā)布時(shí)間:2023/12/19 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简化Java中的异常处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

#1. 不需要Checked異常 Java中的Checked異常,可以說(shuō)有弊無(wú)利,它除了能帶來(lái)一系列的麻煩,能干的事情Unchecked異常都能干。 ##1.1. 代碼污染 首先,當(dāng)一個(gè)方法聲明拋出一個(gè)Checked異常時(shí),該方法的后面就得加上throws XxxException;其次,該方法的調(diào)用者必須要處理這種異常:要么繼續(xù)拋出,調(diào)用方法也得加上throws XxxException;要么捕獲處理,處理方式可能是記錄日志、處理異常流或者再包裝一次拋出去;再次,當(dāng)方法增加另一個(gè)Checked異常時(shí),調(diào)用者也必須增加這個(gè)異常處理,否者代碼編譯都會(huì)出錯(cuò)。 ##1.2. 調(diào)用者未必需要或能夠處理這個(gè)異常 Checked異常強(qiáng)調(diào)調(diào)用者需要處理這種異常,但絕大部分情況是你根本不知道調(diào)用者是否真的需要,或者調(diào)用者是否有能力去處理這種異常。例如:SQLException,調(diào)用者除了能記錄日志或者包裝一下繼續(xù)拋出,還能做什么?在程序運(yùn)行過(guò)程中用代碼去修復(fù)錯(cuò)誤的SQL語(yǔ)法嗎? ##1.3. 都可以用Unchecked異常替代 Checked異常除了強(qiáng)制調(diào)用者捕獲處理以外,并不比Unchecked異常能夠攜帶更多信息。舉個(gè)常用的例子:用戶(hù)登錄,可能輸入錯(cuò)誤的用戶(hù)名或密碼,需要定義兩個(gè)異常:UserNotFoundException、PasswordNotMatchException。把這兩個(gè)異常定義為Checked異常看上去無(wú)可厚非了,調(diào)用者顯然是必須也能夠處理這兩個(gè)異常的。但反過(guò)來(lái)想,這兩個(gè)異常為什么不能定義為Unchecked異常呢?如果調(diào)用者需要分別提示用戶(hù)不同的信息,就分別捕獲處理;如果調(diào)用者需要統(tǒng)一提示用戶(hù):用戶(hù)名或密碼錯(cuò)誤,就一起捕獲處理;如果調(diào)用者本身就有一個(gè)頂層統(tǒng)一的異常處理機(jī)制呢,就讓它直接拋到頂層去處理好了。聰明的Shiro框架就是這么干的,所有的驗(yàn)證異常全部都是Unchecked異常。

#2. 不需要太多的異常 通常情況下,應(yīng)用這個(gè)層面的代碼只需要兩種異常:系統(tǒng)異常和業(yè)務(wù)異常。系統(tǒng)異常用來(lái)告訴用戶(hù):系統(tǒng)繁忙,請(qǐng)稍后再試(通常都是這么委婉,實(shí)際可能是某個(gè)BUG發(fā)作了 ^_^);業(yè)務(wù)異常,用來(lái)告訴用戶(hù)具體的業(yè)務(wù)操作提示信息(新增用戶(hù)時(shí),提示用戶(hù)名已存在之類(lèi)的),提示信息放在message屬性里就好了。兩種異常,也就是兩個(gè)異常類(lèi),它們可以處理掉80%-90%的異常。剩下的情況,只有當(dāng)需要對(duì)某種類(lèi)型的異常流程進(jìn)行特殊處理時(shí),才需要增加異常類(lèi)。例如對(duì)外開(kāi)放API接口時(shí),或許需要定義一個(gè)ApiException,用來(lái)返回錯(cuò)誤的消息。

#3. 把異常拋到頂層處理 應(yīng)用可能分很多層,在頂層設(shè)計(jì)一個(gè)異常處理框架來(lái)統(tǒng)一處理異常是明智的選擇。例如三層結(jié)構(gòu)的web應(yīng)用,應(yīng)該在表現(xiàn)層統(tǒng)一處理異常,而不是讓異常處理分布在各個(gè)層面,像Spring MVC、Struts這些MVC框架都有統(tǒng)一異常處理機(jī)制,用好它們就行了。 異常處理往往是開(kāi)發(fā)人員處理不好的一個(gè)環(huán)節(jié),而這個(gè)環(huán)節(jié)處理又會(huì)帶來(lái)比較大的麻煩,例如錯(cuò)誤的處理導(dǎo)致異常中斷了,最終連錯(cuò)誤日志都找不到。設(shè)計(jì)好一個(gè)頂層異常處理機(jī)制,然后告訴開(kāi)發(fā)人員不用處理異常,這樣可以盡可能的避免發(fā)生這樣的問(wèn)題。 正因如此,異常需要透?jìng)鞯巾攲?#xff0c;代碼又需要保持優(yōu)雅,所以Unchecked異常才是必然的選擇,優(yōu)秀的開(kāi)源框架都是這么干的。

轉(zhuǎn)載于:https://my.oschina.net/jnoee/blog/379980

總結(jié)

以上是生活随笔為你收集整理的简化Java中的异常处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。