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