摘要:如何良好的在代碼中設(shè)計(jì)異常機(jī)制本身設(shè)計(jì)的出發(fā)點(diǎn)是極好的,通過(guò)編譯器的強(qiáng)制捕獲,可以明確提醒調(diào)用者處理異常情況。但使用此種異常后,該會(huì)像病毒一樣,得不到處理后會(huì)污染大量代碼,同時(shí)也可能因?yàn)檎{(diào)用者的不當(dāng)處理,會(huì)失去異常信息。
1、異常是什么?
父類為T(mén)hrowable,有Error和Exception兩個(gè)子類
Error為系統(tǒng)級(jí)別的異常(錯(cuò)誤)
Exception下有眾多子類,常見(jiàn)的有RuntimeException,SQLException,IOException等,其中最特殊的為RuntimeException(運(yùn)行時(shí)異常),RuntimeException為unchecked Exception,編譯期不強(qiáng)制捕獲,系統(tǒng)會(huì)自動(dòng)往上拋,如程序無(wú)處理,會(huì)自動(dòng)調(diào)用e.printStackTrace(),輸出到命令行。RuntimeException以外的異常為check Exception,調(diào)用拋出了checked Exception的方法,編譯期會(huì)強(qiáng)制要求對(duì)異常進(jìn)行處理(try catch 或者繼續(xù)往上拋,此類異常最終必須得到處理,否則編譯不通過(guò))
注:具體詳細(xì)結(jié)構(gòu)請(qǐng)查看源碼或通過(guò)互聯(lián)網(wǎng)渠道搜索
2、為什么要使用異常?
進(jìn)行代碼設(shè)計(jì)時(shí),每一行代碼都可能產(chǎn)生錯(cuò)誤,有些錯(cuò)誤可以立即處理,而有些錯(cuò)誤可能在當(dāng)前的邏輯中無(wú)法立即處理(因?yàn)樽鳛榉椒ㄌ峁┱卟⒉恢勒{(diào)用者出錯(cuò)之后想做什么操作),異常解決的便是這種問(wèn)題,讓錯(cuò)誤被延遲處理,,作為提供者只需要告訴用戶出了什么問(wèn)題,至于用戶得知問(wèn)題時(shí)如何處理,無(wú)需關(guān)心。
3、JDK中的異常機(jī)制
JDK中已有一系列的異常,是Java為開(kāi)發(fā)者提供的常用異常,IO,util等包中的方法也有拋出相關(guān)的checked Exception,JDK提供的RuntimeException均因編程錯(cuò)誤導(dǎo)致,在開(kāi)發(fā)者不使用自定義RuntimeException的情況下,可通過(guò)代碼修改進(jìn)行規(guī)避,從這方面看,JDK提供的RuntimeException更大的作用在于調(diào)試。
4、如何良好的在代碼中設(shè)計(jì)異常機(jī)制?
checked Exception本身設(shè)計(jì)的出發(fā)點(diǎn)是極好的,通過(guò)編譯器的強(qiáng)制捕獲,可以明確提醒調(diào)用者處理異常情況。但使用此種異常后,該Exception會(huì)像病毒一樣,得不到處理后會(huì)污染大量代碼,同時(shí)也可能因?yàn)檎{(diào)用者的不當(dāng)處理,會(huì)失去異常信息。
而某些提供者與調(diào)用者可以處理或者通過(guò)契約可以避免的問(wèn)題也不該濫用checked Exception,只有那些程序之外的問(wèn)題,程序本身無(wú)法保證不出異常時(shí)才該使用checked Exception,例如IO,SQL等。
為了代碼的可讀性和穩(wěn)健性,結(jié)合一些資料,我個(gè)人的做法是自定義繼承自Runtime Exception的異常,同時(shí)可擴(kuò)展一些功能(結(jié)合錯(cuò)誤碼),把程序中的異常進(jìn)行統(tǒng)一包裝,再利用ControllerAdvice進(jìn)行統(tǒng)一的捕獲處理,同時(shí)該異常也可以作為所有程序非正常情況終止的出口。
具體使用方法,請(qǐng)參考此demo:https://github.com/Zhangchiii...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/66864.html
摘要:我拿網(wǎng)易郵箱賬號(hào)舉例子,那么我們?nèi)绾尾拍茏屇愕泥]箱賬號(hào)可以利用第三方發(fā)送郵件這里的第三方就是我們即將編寫(xiě)的程序。 一 前言 測(cè)試所使用的環(huán)境 測(cè)試使用的環(huán)境是企業(yè)主流的SSM 框架即 SpringMVC+Spring+Mybatis。為了節(jié)省時(shí)間,我直接使用的是我上次的SSM項(xiàng)目中整合Echarts開(kāi)發(fā)該項(xiàng)目已經(jīng)搭建完成的SSM環(huán)境。 標(biāo)題說(shuō)的四種姿勢(shì)指的是哪四種姿勢(shì)? 發(fā)送text...
摘要:性能和約束只在機(jī)器人端可用。機(jī)器人的中心在腳上,并且機(jī)器人的軀干是筆直向上的的。相對(duì)速度,范圍從一個(gè)布爾值,表明目標(biāo)姿勢(shì)是否正確達(dá)到。在操控機(jī)器人時(shí),使用這個(gè)方法以達(dá)到顯示出動(dòng)作的效果。機(jī)器人可能需要使用者的幫助以達(dá)到這個(gè)姿勢(shì)。 NAO APIs nao的接口全部以AL開(kāi)頭,全部繼承自ALModule,它被包含在中。下面是ALModule的主要methods。 ALModule API...
摘要:驗(yàn)證參數(shù)傳遞函數(shù)返回值,是單元測(cè)試中十分重要的環(huán)節(jié)。一般形式單元測(cè)試下文稱為例子這個(gè)單元測(cè)試是通過(guò)的。不過(guò),僅僅比較兩個(gè)對(duì)象,這個(gè)單元測(cè)試還是有問(wèn)題的。單元測(cè)試的細(xì)節(jié),已經(jīng)講得七七八八了。 showImg(http://i1.piimg.com/577986/c22d72463031233b.jpg); 原文鏈接:http://www.jianshu.com/p/77ee7c0270b...
摘要:,關(guān)閉不當(dāng)編譯器警告信息。創(chuàng)建固定大小的線程池。此線程池不會(huì)對(duì)線程池大小做限制,線程池大小完全依賴于操作系統(tǒng)或者說(shuō)能夠創(chuàng)建的最大線程大小。此線程池支持定時(shí)以及周期性執(zhí)行任務(wù)的需求。 目前在搞 Node.js,曾經(jīng)的 JAVA 知識(shí)忘了好多,為此整理了下,感嘆下工業(yè)語(yǔ)言還是有相當(dāng)?shù)膬?yōu)勢(shì)的。 流 Java所有的流類位于java.io包中,都分別繼承字以下四種抽象流類型。 Type 字節(jié)...
閱讀 1961·2021-11-23 09:51
閱讀 873·2021-11-19 09:40
閱讀 829·2021-10-27 14:20
閱讀 5004·2021-10-09 09:52
閱讀 3297·2021-10-09 09:44
閱讀 1729·2021-10-08 10:05
閱讀 5054·2021-09-09 11:47
閱讀 3481·2019-08-30 12:47