Exception和Error的區(qū)別有哪些

Exception和Error的區(qū)別有哪些,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

成都創(chuàng)新互聯(lián)公司專注于武鄉(xiāng)網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供武鄉(xiāng)營銷型網(wǎng)站建設(shè),武鄉(xiāng)網(wǎng)站制作、武鄉(xiāng)網(wǎng)頁設(shè)計(jì)、武鄉(xiāng)網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造武鄉(xiāng)網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供武鄉(xiāng)網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

Exception和Error都是繼承了Throwable類,在Java代碼中只有繼承了Throwable類的實(shí)例才可以被throw或者被catch。

Exception是程序正常運(yùn)行過程中可以預(yù)料到的意外情況,應(yīng)該被開發(fā)者捕獲并且進(jìn)行相應(yīng)的處理。

Error是指在正常情況下不太可能出現(xiàn)的情況,絕大部分的Error都會(huì)導(dǎo)致程序處于不正常、不可恢復(fù)的狀態(tài)也就是掛了。所以不便也不需被開發(fā)者捕獲,因?yàn)檫@個(gè)情況下你捕獲了也無濟(jì)于事。

Java異常又分可檢查異常和不檢查異常??蓹z查異常就是編譯器要求必須處置的異常,比如IOException等在代碼里必須顯式的進(jìn)行捕獲處理。不檢查異常就是編譯器不要求強(qiáng)制處置的異常,包括運(yùn)行時(shí)異常(RuntimeException和其子類)和錯(cuò)誤(Error),比如NullPointerException等。

異常處理的注意事項(xiàng)

1、盡量不要捕獲類似Exception這樣通用的異常,而應(yīng)該捕獲特定的異常。

軟件工程是一門協(xié)作的藝術(shù),在日常的開發(fā)中我們有義務(wù)使自己的代碼能更直觀、清晰的表達(dá)出我們想要表達(dá)的信息。

但是如果你什么異常都用了Exception,那別的開發(fā)同事就不能一眼得知這段代碼實(shí)際想要捕獲的異常,并且這樣的代碼也會(huì)捕獲到可能你希望它拋出而不希望捕獲的異常。

2、不要"吞"了異常

如果我們捕獲了異常,不把異常拋出,或者沒有寫到日志里,那會(huì)出現(xiàn)什么情況?線上除了bug莫名其妙的沒有任何的信息,你都不知道哪里出錯(cuò)以及出錯(cuò)的原因。

這可能會(huì)讓一個(gè)簡單的bug變得難以診斷。而且有些同學(xué)比較喜歡用catch之后用e.printStackTrace(),在我們產(chǎn)品中通常不推薦用這種方法,一般情況下這樣是沒有問題的但是這個(gè)方法輸出的是個(gè)標(biāo)準(zhǔn)錯(cuò)誤流。

Exception和Error的區(qū)別有哪些

比如是在分布式系統(tǒng)中,發(fā)生異常但是找不到stacktrace。所以最好是輸入到日志里,我們產(chǎn)品可以自定義一定的格式,將詳細(xì)的信息輸入到日志系統(tǒng)中,適合清晰高效的排查錯(cuò)誤。

3、不要延遲處理異常

比如你有個(gè)方法,參數(shù)是個(gè)name,函數(shù)內(nèi)部調(diào)了別的好幾個(gè)方法,其實(shí)你的name傳的是null值,但是你沒有在進(jìn)入這個(gè)方法或者這個(gè)方法一開始就處理這個(gè)情況,而是在你調(diào)了別的好幾個(gè)方法然后爆出這個(gè)空指針。

這樣的話明明你的出錯(cuò)堆棧信息只需要拋出一點(diǎn)點(diǎn)信息就能定位到這個(gè)錯(cuò)誤所在的地方,進(jìn)過了好多方法之后可能就是一坨堆棧信息。

4、只在需要try-catch的地方try-catch,try-catch的范圍能小則小

只要必要的代碼段使用try-catch,不要不分青紅皂白try住一坨代碼,因?yàn)閠ry-catch中的代碼會(huì)影響JVM對代碼的優(yōu)化,例如重排序。

5、不要通過異常來控制程序流程

一些可以用if/else的條件語句來判斷例如null值等,就不要用異常,異??隙ㄊ潜纫恍l件語句低效的。而且每實(shí)例化一個(gè)Exception都會(huì)對棧進(jìn)行快照,相對而言這是一個(gè)比較重的操作,如果數(shù)量過多開銷就不能被忽略了。

6、不要在finally代碼塊中處理返回值或者直接return

在finally中return或者處理返回值會(huì)讓發(fā)生很詭異的事情,比如覆蓋了try中的return,或者屏蔽的異常。具體可以去博客什么查查,這里不具體展開講了。

關(guān)于Exception和Error的區(qū)別有哪些問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

名稱欄目:Exception和Error的區(qū)別有哪些
瀏覽路徑:http://muchs.cn/article26/ihjccg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、外貿(mào)建站、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)