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