生产Java应用程序中的十大异常类型-基于1B事件
Pareto記錄原理:97%的記錄錯誤語句是由3%的唯一錯誤引起的
在最新的數(shù)據(jù)整理帖子之后,我們收到了很多反饋和問題,在該文章中,我們顯示97%的記錄錯誤是由10個唯一錯誤引起的 。 根據(jù)普遍的需求,我們將更深入地研究此研究中包含的1,000多個應用程序中的頂級異常類型。
來吧。
(順便說一下,這是我們的第一篇推薦配樂, 請檢查一下自己 )
無須再做:按類型劃分的頂級異常
為了提取數(shù)據(jù),我們從Takipi的錯誤分析微代理監(jiān)視的1000多個應用程序中提取了匿名統(tǒng)計信息,并檢查了每個公司的十大例外類型。 然后,我們將所有數(shù)據(jù)合并,得出總體前十名的列表。
每個生產(chǎn)環(huán)境都不同,研發(fā)團隊使用不同的第三方庫,并且擁有自己的自定義例外類型。 從更大的角度看,標準異常脫穎而出,并且一些有趣的模式變得可見。
真數(shù)據(jù)
1. NullPointerException – 70%的生產(chǎn)環(huán)境
是。 臭名昭著的NullPointerException位于#1。 Null Reference的發(fā)明者Charles Antony Richard Hoare爵士說的沒錯:
“我稱之為我十億美元的錯誤。 這是在1965年發(fā)明空引用的結果。它導致了無數(shù)的錯誤,漏洞和系統(tǒng)崩潰,在最近40年中可能造成十億美元的痛苦和破壞。
在我們研究的70%的生產(chǎn)環(huán)境中,NPE排在前十位,位居第一。 在Takipi ,我們實際上有一個特殊的警報,每當在系統(tǒng)上引入新的NullPointerException時,我們都可以通過它來知道自己的設置 。
塔基皮NPE怪物
2. NumberFormatException – 55%的生產(chǎn)環(huán)境
在#2中是NumberFormatException,它在您嘗試將字符串轉(zhuǎn)換為數(shù)字值且String格式不正確時發(fā)生。 它擴展了IllegalArgumentException,該異常也在這里#3出現(xiàn)。
一種簡單的修復方法是確保傳遞給parse方法的輸入傳遞以下正則表達式:
3. IllegalArgumentException – 50%的生產(chǎn)環(huán)境
緊隨其后的是IllegalArgumentException,排在第3位,在本次調(diào)查的50%生產(chǎn)環(huán)境中排名前10位。
IllegalArgumentException實際上使您免于麻煩,并在將參數(shù)從意外類型傳遞給方法時拋出該異常。 例如,某些方法期望使用類型X,而您使用類型Y作為參數(shù)來調(diào)用它。 同樣,這是由于未檢查您作為其他方法的輸入發(fā)送的錯誤而導致的錯誤。
IllegalArgumentException塔基皮怪獸
4. RuntimeException – 23%的生產(chǎn)環(huán)境
前十個列表中的所有異常對象(除Exception外)均未選中,并擴展了RuntimeException。 但是,在#4處,我們面臨著“純” RuntimeException,在Java中,該語言實際上并未拋出任何異常。 那么這是怎么回事?
有兩種主要用例可從您的代碼中顯式引發(fā)RuntimeException:
- 圍繞擴展RuntimeException的另一個異?!鞍b”一個常規(guī)的未經(jīng)檢查的異常
- 取消檢查異常
關于已檢查與未檢查以及我們在此描述的最后一個用例的著名故事來自亞馬遜的AWS開發(fā)工具包,該工具僅拋出未檢查的異常并拒絕使用已檢查的異常。
Takipi RuntimeExceptionMonster
5. IllegalStateException – 22%的生產(chǎn)環(huán)境
在第5名中,IllegalStateException是本帖所涵蓋的1,000多個應用程序中的22%中排名前10位的例外。
當您嘗試在不適當?shù)臅r間使用方法時,會引發(fā)IllegalStateException,例如…在《 我如何與母親見面》的第一集中與Ted和Robin的場景。
一個更現(xiàn)實的Java示例是,如果您使用URLConnection,嘗試做一些假設您未連接的操作,并得到“ IllegalStateException:已連接”。
6. NoSuchMethodException –生產(chǎn)環(huán)境的16%
這樣的方法,很混亂 。 在此數(shù)據(jù)緊縮中,有16%的生產(chǎn)環(huán)境在其前10名中具有NoSuchMethodException。
由于我們大多數(shù)人在喝醉的時候不會寫代碼,至少在白天沒有這么做,這并不一定意味著我們會以為自己看到的東西不那么瘋狂。 這樣一來,編譯器就可以在過程的較早階段捕獲這種方式。
當您嘗試使用不存在的方法時,會引發(fā)此異常,當您使用反射并從某個變量獲取方法名稱,或者針對某個類的版本進行構建并使用在生產(chǎn)中使用另一種(感謝@braxuss )。
7. ClassCastException – 15%的生產(chǎn)環(huán)境
當我們試圖將一個類強制轉(zhuǎn)換為另一個非實例的類時,就會發(fā)生ClassCastException。 15%的生產(chǎn)環(huán)境將其排在前10位,這很麻煩。
規(guī)則是,不能將對象強制轉(zhuǎn)換為不繼承對象的其他類。 大自然曾經(jīng)做過一次,當時沒人在看,這就是我們得到…… Java鼠標鹿的方式 。 是的,那是一個真實的生物。
8.例外–生產(chǎn)環(huán)境的15%
在#8中,所有例外項的母親Exception, DUN DUN DUUUUN (祖母可投擲 )。
Java從不拋出簡單的異常,因此這是RuntimeException之類的另一種情況,它必須是……您或第三方代碼顯式地拋出它,原因是:
9. ParseException – 13%的生產(chǎn)環(huán)境
解析錯誤再次發(fā)出! 每當我們傳遞字符串以將其解析為其他內(nèi)容,并且未按照應有的格式對其進行格式化時,就會被ParseException擊中。 笨蛋
在這篇文章中測試的13%的生產(chǎn)環(huán)境中,前十名中都包含此異常,這比您想象的要普遍。
解決的方法是……再次檢查自己。
10. InvocationTargetException – 13%的生產(chǎn)環(huán)境
Java Reflection領域拋出的另一個異常是InvocationTargetException。 實際上,這是一個包裝,如果在調(diào)用的方法中出現(xiàn)問題,則將該異常包裝到InvocationTargetException中。
要獲取原始異常,您必須使用getTargetException方法。
我們看到這篇文章中測試的13%的生產(chǎn)環(huán)境將其列入前十大例外列表中。 這里的第二種異常類型與Java的反射功能直接相關。
最后的想法
Java異常的世界確實豐富多彩,令人驚訝的是,前十大異常對我們的日志有多大影響。 所有記錄的錯誤中有97%來自10個唯一異常。
嘗試Takipi ,找出您自己的生產(chǎn)環(huán)境中最常見的10個例外,開始只需幾分鐘,您還可以獲得修復它們所需的所有數(shù)據(jù)。 源,堆棧,狀態(tài)。
翻譯自: https://www.javacodegeeks.com/2016/06/top-10-exception-types-production-java-applications-based-1b-events.html
總結
以上是生活随笔為你收集整理的生产Java应用程序中的十大异常类型-基于1B事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿霞第二部大结局剧情 还是那片情大结局
- 下一篇: 人员身份怎么填写 人员身份如何填写