最常见的Java异常及其对Java开发人员的评价
我知道我說在完成視頻之前我不會(huì)張貼帖子,但這一直困擾著我。 至于視頻的更新,我有些懶散,有些忙碌,但是我已經(jīng)準(zhǔn)備好記錄第一集,這是我第一次有機(jī)會(huì),而且我不需要太多的編輯。 無論如何,還是今天的話題。
Takipi博客最近發(fā)布了兩篇有關(guān)前10個(gè) 最常拋出的異常 (已記錄)的文章。 這10個(gè)例外占這些日志中97%的例外。 我想按從最常見到最不重要的順序列出這些例外情況,并簡(jiǎn)要說明這些例外情況。
空指針異常
NPE排在此列表中,甚至排在榜首,這對(duì)大多數(shù)人來說并不奇怪,但事實(shí)并非如此! 這些異常是可以避免的。 有兩種相對(duì)著名的方法可以避免Java中已經(jīng)存在的空對(duì)象模式和Optional類型, 并且如果您切換到具有空安全性的語(yǔ)言(例如與Java完全兼容的Kotlin),則幾乎不需要考慮避免使用NPE。
我們都應(yīng)該通過采取良好的預(yù)防措施(除非正常的空值檢查是從第三者那里獲得的,除非正常情況下,我不認(rèn)為正常的空值檢查是最佳方法),才能努力防止這些異常。有助于預(yù)防NPE的語(yǔ)言。
NumberFormatException和ParseException
ParseException在列表中排名第9,但它與NumberFormatException緊密相關(guān),我發(fā)現(xiàn)確實(shí)令人不安的是, 這兩個(gè)都位于前10名中,其中之一是#2。 兩者都與將String數(shù)據(jù)解析為其他內(nèi)容有關(guān),我不禁認(rèn)為,由于這些異常的普遍性,開發(fā)人員并未充分利用類型系統(tǒng)來發(fā)揮自己的優(yōu)勢(shì), “字符串型”編程。
現(xiàn)在,這些異常中的很大一部分可能是由于用戶輸入錯(cuò)誤或某種序列化問題引起的,但那里可能也存在太多“字符串類型”的對(duì)象。 由錯(cuò)誤的用戶輸入引起的錯(cuò)誤可能應(yīng)該在通過解析器運(yùn)行之前進(jìn)行檢查,而這恰恰是初始輸入驗(yàn)證的一部分。
我的意思可能是我想說的更苛刻。 在許多情況下,這些都是很難避免的例外,將它們排在前十名也就不足為奇了。
NoSuchMethodException和InvocationTargetException
這兩種情況都是在反思中發(fā)生的,我可能不會(huì)多說,但是我非常不喜歡反思。 幾乎總是有另一種方式。 那樣的方法可能并不容易,但是我相信它總是總會(huì)更好,因?yàn)槭虑樽兊酶用鞔_和易于理解,并且您會(huì)從錯(cuò)誤中獲得更多的編譯器幫助。
肯定有一些避免反射的異常(例如,使用反射運(yùn)行所有測(cè)試的JUnit),但是我敢肯定,這些異常中的大多數(shù)都是無緣無故拋出的,使用常規(guī)編程技術(shù)可以避免問題。
要查看關(guān)于避免像反射這樣的“魔術(shù)”的真正好話,請(qǐng)查看“ 8行代碼” (跟隨起來很困難,因?yàn)橐曨l只看著揚(yáng)聲器,而且他在幻燈片中回跳得還不錯(cuò),所以甚至很難跟著幻燈片一起跟隨)。 這也是我選擇Java Spark而不是Spring的原因之一。
IllegalArgumentException
我實(shí)際上不介意出現(xiàn)這種情況。 這意味著很多人正在檢查他們的輸入,并確保他們不會(huì)搞砸一切。 有一些方法可以減少計(jì)數(shù),例如使用真正強(qiáng)壯的打字,例如Object Calisthenics的建議(規(guī)則3和4),但這是一組故意過分熱心的規(guī)則,可以幫助您學(xué)習(xí),并且遵循它只是將IllegalArgumentException進(jìn)一步推到一個(gè)位置。
RuntimeException和異常
真? 真?! 那只是無濟(jì)于事,特別是Exception。 我可以理解將異常轉(zhuǎn)換為運(yùn)行時(shí)異常,但僅使用RuntimeException并不是最佳方法。 為此創(chuàng)建一個(gè)自定義異常,即使它與WrappedException一樣通用。
IllegalStateException
同樣,良好的OO設(shè)計(jì)可以解決此問題,但是有時(shí)很難提出這些設(shè)計(jì)。 我會(huì)輕松一點(diǎn)的。
ClassCastException
我不知道這件事的感覺。 我擔(dān)心其中有多少可能是由于反射或在泛型可用時(shí)使用原始類型引起的。 在這兩種情況下,都需要停止。 但是我也知道,有很多地方真的很難避免,因此我不會(huì)對(duì)此進(jìn)行豎琴演奏。
結(jié)論…
該例外列表中令我最擔(dān)心的是Java代碼中普遍存在的NPE和反射問題的數(shù)量。 其他許多人都與弱的OO設(shè)計(jì)有關(guān),但是我知道那里有很多新手或經(jīng)驗(yàn)不足的開發(fā)人員,或者他們的問題使他們很難和/或不值得進(jìn)行更深入的開發(fā)。 我不得不放開那些案件。
請(qǐng)讀者,如果您從中學(xué)習(xí)到任何東西,請(qǐng)了解一下,將來可以通過學(xué)習(xí)如何解決null問題(通過使用null安全語(yǔ)言或使用Optional或Null Object模式)來避免很多麻煩。嘗試看看您可以從代碼中獲取多少反射和注釋。
翻譯自: https://www.javacodegeeks.com/2016/06/common-java-exceptions-says-java-devs.html
總結(jié)
以上是生活随笔為你收集整理的最常见的Java异常及其对Java开发人员的评价的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带有Kafka和ZeroMQ的分布式类星
- 下一篇: 牧马人电脑(牧马人电脑外设)