蜜桃av色欲a片精品一区,麻豆aⅴ精品无码一区二区,亚洲人成网站在线播放影院在线,亚洲 素人 字幕 在线 最新

微立頂科技

新聞資訊

創(chuàng)新 服務(wù) 價(jià)值

  分享一個(gè)你很可能不知道的Java異常實(shí)現(xiàn)的缺陷

發(fā)布日期:2022/12/7 14:07:45      瀏覽量:

前言

Java中一個(gè)大家熟知的知識(shí)點(diǎn)就是異常捕獲,try...catch...finally組合,但是很多人不知道這里面有一個(gè)關(guān)于Java的缺陷,或者說(shuō)是異常實(shí)現(xiàn)的一點(diǎn)不足之處。

我這邊就通過(guò)一個(gè)很簡(jiǎn)單的實(shí)驗(yàn)給大家演示下效果玩玩兒,希望大家能覺(jué)得有趣。

模擬

1、自定義異常

這里,我們首先寫(xiě)一個(gè)自定義業(yè)務(wù)異常,專(zhuān)門(mén)用來(lái)拋出。

2、模擬異常

然后,我們寫(xiě)個(gè)測(cè)試方法來(lái)捕獲并拋出空指針異常。

看下效果,OK沒(méi)問(wèn)題。

接下來(lái),我們加上finally看看。

看下效果,OK也沒(méi)問(wèn)題。

接下來(lái)我們這么做,在finally中拋出一個(gè)異常。

看下效果,發(fā)現(xiàn)catch的異常竟然被覆蓋了。

雖然這種場(chǎng)景很特殊,但這其實(shí)就是Java在異常實(shí)現(xiàn)上美中不足的地方,因?yàn)楫惓J亲鳛槌绦虺鲥e(cuò)的標(biāo)志絕對(duì)不應(yīng)忽略,可是這種場(chǎng)景下異常的的確確丟失了。

接下來(lái),我們?cè)贉y(cè)試一種情況,在finally中使用return,看看會(huì)發(fā)生什么。

看看效果,發(fā)現(xiàn)catch中捕獲的異常干脆直接沒(méi)了,仿佛從沒(méi)來(lái)過(guò)。

最后,我們?cè)傺菔疽环N你可能工作中干過(guò)或者見(jiàn)過(guò)的莫名其妙的事情。

我們修改一下這個(gè)測(cè)試方法,看代碼。

簡(jiǎn)單描述一下,你調(diào)用其他類(lèi)的一個(gè)查詢(xún)方法,那個(gè)方法可能習(xí)慣性的try..catch..finally了,而finally中還做了一些末尾必須要執(zhí)行的操作,這個(gè)業(yè)務(wù)邏輯處理可能有幾十行,你很可能又習(xí)慣性的做了一些判斷以及異常的拋出。

別不相信,當(dāng)一個(gè)項(xiàng)目進(jìn)入中期甚至趕進(jìn)度的時(shí)候,方法套方法,不少人已經(jīng)在機(jī)械的茫然的寫(xiě)代碼,也可能是在別人的基礎(chǔ)上改代碼,你很可能不會(huì)太仔細(xì)地一行一行去看那些代碼里究竟有什么,恰巧測(cè)試的時(shí)候也沒(méi)出什么大問(wèn)題。

那么結(jié)果可能就是下面這樣,你會(huì)發(fā)現(xiàn)自己一開(kāi)始特意拋出的那個(gè)捕獲該查詢(xún)方法異常的玩意兒沒(méi)一點(diǎn)效果,也不知道去哪兒了,怎么找也找不到,不知從哪兒冒出來(lái)下面這個(gè)莫名其妙的異常,后來(lái)想不到也就算了。

原因

這其實(shí)就是Java異常實(shí)現(xiàn)的一個(gè)不足,異常是程序出錯(cuò)的標(biāo)志,怎么都不應(yīng)該被忽略掉,更不用說(shuō)是finally這種常用的行為,直接或間接地造成了異常的丟失。

《Thinking In Java》的作者有明確指出這個(gè)異常,認(rèn)為這是相當(dāng)嚴(yán)重的缺陷,是一個(gè)可能造成異常完全丟失的缺陷,而且是以一種更微妙、更難以察覺(jué)的方式在進(jìn)行。

而C++就處理的很好,會(huì)將這種在第一個(gè)異常被處理之前拋出第二個(gè)異常的情況視為嚴(yán)重的編程錯(cuò)誤。

總結(jié)

知道了這個(gè)缺陷后,其實(shí)就很好避免了。

1、避免在finally中拋出異常;

2、避免在finally中使用return;

3、catch中一定要養(yǎng)成log.error記錄異常日志的好習(xí)慣,因?yàn)閘og是一定會(huì)記錄下來(lái)的,至少不會(huì)讓你毫無(wú)線(xiàn)索。

結(jié)尾再演示下加了日志的效果,只要是catch我都加上日志,那么一定不會(huì)錯(cuò)過(guò)。



  業(yè)務(wù)實(shí)施流程

需求調(diào)研 →

團(tuán)隊(duì)組建和動(dòng)員 →

數(shù)據(jù)初始化 →

調(diào)試完善 →

解決方案和選型 →

硬件網(wǎng)絡(luò)部署 →

系統(tǒng)部署試運(yùn)行 →

系統(tǒng)正式上線(xiàn) →

合作協(xié)議

系統(tǒng)開(kāi)發(fā)/整合

制作文檔和員工培訓(xùn)

售后服務(wù)

馬上咨詢(xún): 如果您有業(yè)務(wù)方面的問(wèn)題或者需求,歡迎您咨詢(xún)!我們帶來(lái)的不僅僅是技術(shù),還有行業(yè)經(jīng)驗(yàn)積累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     聯(lián)系人:石先生/雷先生