生产Java应用程序中的十大异常类型-基于1B事件

Pareto记录原理:97%的记录错误语句是由3%的唯一错误引起的

在最新的数据整理帖子之后,我们收到了很多反馈和问题,在该文章中,我们显示97%的记录错误是由10个唯一错误引起的 。 根据普遍的需求,我们将更深入地研究此研究中包含的1,000多个应用程序中的顶级异常类型。

来吧。

(顺便说一下,这是我们的第一篇推荐配乐, 请检查一下自己 )

无须再做:按类型划分的顶级异常

十大例外

为了提取数据,我们从Takipi的错误分析微代理监视的1000多个应用程序中提取了匿名统计信息,并检查了每个公司的十大例外类型。 然后,我们将所有数据合并,得出总体前十名的列表。

每个生产环境都不同,研发团队使用不同的第三方库,并且拥有自己的自定义例外类型。 从更大的角度看,标准异常脱颖而出,并且一些有趣的模式变得可见。

自我检查

真数据

1. NullPointerException – 70%的生产环境

是。 臭名昭著的NullPointerException位于#1。 Null Reference的发明者Charles Antony Richard Hoare爵士说的没错:

“我称之为我十亿美元的错误。 这是在1965年发明空引用的结果。它导致了无数的错误,漏洞和系统崩溃,在最近40年中可能造成十亿美元的痛苦和破坏。

在我们研究的70%的生产环境中,NPE排在前十位,位居第一。 在Takipi ,我们实际上有一个特殊的警报,每当在系统上引入新的NullPointerException时,我们都可以通过它来知道自己的设置 。

塔基皮NPE怪物

塔基皮NPE怪物

2. NumberFormatException – 55%的生产环境

在#2中是NumberFormatException,它在您尝试将字符串转换为数字值且String格式不正确时发生。 它扩展了IllegalArgumentException,该异常也在这里#3出现。

一种简单的修复方法是确保传递给parse方法的输入传递以下正则表达式:

  1. 对于整数值:“-?\\ d +”
  2. 对于浮点值:“-?\\ d +。\\ d +”

3. IllegalArgumentException – 50%的生产环境

紧随其后的是IllegalArgumentException,排在第3位,在本次调查的50%生产环境中排名前10位。

IllegalArgumentException实际上使您免于麻烦,并在将参数从意外类型传递给方法时抛出该异常。 例如,某些方法期望使用类型X,而您使用类型Y作为参数来调用它。 同样,这是由于未检查您作为其他方法的输入发送的错误而导致的错误。

IllegalArgumentException塔基皮怪兽

IllegalArgumentException塔基皮怪兽

4. RuntimeException – 23%的生产环境

前十个列表中的所有异常对象(除Exception外)均未选中,并扩展了RuntimeException。 但是,在#4处,我们面临着“纯” RuntimeException,在Java中,该语言实际上并未抛出任何异常。 那么这是怎么回事?

有两种主要用例可从您的代码中显式引发RuntimeException:

  1. 引发新的“通用”未经检查的异常
  2. 重新抛出:
    • 围绕扩展RuntimeException的另一个异常“包装”一个常规的未经检查的异常
    • 取消检查异常

关于已检查与未检查以及我们在此描述的最后一个用例的著名故事来自亚马逊的AWS开发工具包,该工具仅抛出未检查的异常并拒绝使用已检查的异常。

RuntimeException怪物

Takipi RuntimeExceptionMonster

5. IllegalStateException – 22%的生产环境

在第5名中,IllegalStateException是本帖所涵盖的1,000多个应用程序中的22%中排名前10位的例外。

当您尝试在不适当的时间使用方法时,会引发IllegalStateException,例如…在《 我如何与母亲见面》的第一集中与Ted和Robin的场景。

一个更现实的Java示例是,如果您使用URLConnection,尝试做一些假设您未连接的操作,并得到“ IllegalStateException:已连接”。

6. NoSuchMethodException –生产环境的16%

这样的方法,很混乱 。 在此数据紧缩中,有16%的生产环境在其前10名中具有NoSuchMethodException。

由于我们大多数人在喝醉的时候不会写代码,至少在白天没有这么做,这并不一定意味着我们会以为自己看到的东西不那么疯狂。 这样一来,编译器就可以在过程的较早阶段捕获这种方式。

当您尝试使用不存在的方法时,会引发此异常,当您使用反射并从某个变量获取方法名称,或者针对某个类的版本进行构建并使用在生产中使用另一种(感谢@braxuss )。

7. ClassCastException – 15%的生产环境

当我们试图将一个类强制转换为另一个非实例的类时,就会发生ClassCastException。 15%的生产环境将其排在前10位,这很麻烦。

规则是,不能将对象强制转换为不继承对象的其他类。 大自然曾经做过一次,当时没人在看,这就是我们得到…… Java鼠标鹿的方式 。 是的,那是一个真实的生物。

8.例外–生产环境的15%

在#8中,所有例外项的母亲Exception, DUN DUN DUUUUN (祖母可投掷 )。

Java从不抛出简单的异常,因此这是RuntimeException之类的另一种情况,它必须是……您或第三方代码显式地抛出它,原因是:

  1. 您需要一个异常,并且懒得指定它的实际含义。
  2. 或者…更具体地说,由于某种原因,您需要抛出一个检查异常

9. ParseException – 13%的生产环境

解析错误再次发出! 每当我们传递字符串以将其解析为其他内容,并且未按照应有的格式对其进行格式化时,就会被ParseException击中。 笨蛋

在这篇文章中测试的13%的生产环境中,前十名中都包含此异常,这比您想象的要普遍。

解决的方法是……再次检查自己。

10. InvocationTargetException – 13%的生产环境

Java Reflection领域抛出的另一个异常是InvocationTargetException。 实际上,这是一个包装,如果在调用的方法中出现问题,则将该异常包装到InvocationTargetException中。

要获取原始异常,您必须使用getTargetException方法。

我们看到这篇文章中测试的13%的生产环境将其列入前十大例外列表中。 这里的第二种异常类型与Java的反射功能直接相关。

最后的想法

Java异常的世界确实丰富多彩,令人惊讶的是,前十大异常对我们的日志有多大影响。 所有记录的错误中有97%来自10个唯一异常。

尝试Takipi ,找出您自己的生产环境中最常见的10个例外,开始只需几分钟,您还可以获得修复它们所需的所有数据。 源,堆栈,状态。

翻译自: https://www.javacodegeeks.com/2016/06/top-10-exception-types-production-java-applications-based-1b-events.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

教你制作QQ空间超高连通率背景音乐链接。

1.进入【搜搜音乐】http://music.soso.com/index.html 搜索你想要的歌曲名字。。。如下图: 2、 3.此链接地址并不能做背景链接,因为腾讯加密了,你只需将链接地址里的qq改成%71%71就可以作为背景音乐链接了。如图:

Java EE 8,当前状态是什么:自2015年底以来已完成工作的案例研究

对于那些密切关注Java EE的人来说,在过去的六个月中已经很清楚,活动有所减少,尤其是在Oracle保持领先的JSR中。 这是怎么回事? 最近,在这方面,Java EE社区进行了很多讨论,我认为给开发人员社区一…

Lombok,一种编译时Java注释预处理器,可最大程度地减少代码大小

在本文中,我们将看到如何在常规Java代码中使用lombok来最小化代码长度和冗余。 什么是Lombok? Lombok,一个编译时注释预处理器,有助于在编译时注入一些代码。 在详细介绍之前,我要求您应该从他们的网站上观看视频。 …

css3实现雷达图

效果图&#xff1a;gif图&#xff1a;代码&#xff1a;<!DOCTYPE html> <html > <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEEdge,chrome1"/> <meta name"viewpor…

STL set

STL set 百科名片 STL 对这个序列可以进行查找&#xff0c;插入删除序列中的任意一个元素&#xff0c;而完成这些操作的时间同这个序列中元素个数的对数成比例关系&#xff0c;并且当游标指向一个已删除的元素时&#xff0c;删除操作无效。而一个经过更正的和更加实际的定义应该…

一、Objective-C之Runtime的概念

前一篇关于NSProxy代理涉及到的关于消息转发&#xff0c;把以前写的runtime文章从github上转移过来。一共三篇&#xff0c;似乎自己也忘记了一些runtime的细节&#xff0c;需要温故一下。 一、什么是Objc的Runtime&#xff1f; Runtime是Objc语言的磐石&#xff0c;Objc语言得以…

jsf服务_使用JSF的面向服务的UI

jsf服务在大型软件开发项目中&#xff0c;面向服务的体系结构非常常见&#xff0c;因为它提供了可供不同团队或部门使用的功能接口。 创建用户界面时&#xff0c;应应用相同的原理。 对于具有开票部门和客户管理部门等的大型公司&#xff0c;组织结构图可能如下所示&#xff1a…

ANTLR和Jetbrains MPS:解析文件并以树符号显示AST

Itemis再次这样做&#xff1a;他们刚刚为Jetbrains MPS发布了一个非常酷的新插件。 这允许定义新的树编辑器。 他们看起来像这样&#xff1a; 在这篇文章中&#xff0c;我们将看到&#xff1a; 如何在MPS中使用ANTLR解析器 如何使用树符号表示已解析的AST 特别是&#xf…

KMP字符串模式匹配详解

刚看到位兄弟也贴了份KMP算法说明&#xff0c;但本人觉得说的不是很详细&#xff0c;当初我在看这个算法的时候也看的头晕昏昏的&#xff0c;我贴的这份也是网上找的。且听详细分解&#xff1a;KMP字符串模式匹配详解 来自CSDN A_B_C_ABC 网友 KMP字符串模式匹配通俗点说…

ASP.NET Core IdentityServer4 新手上路

OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准&#xff08;如果是按照参考文章复制粘贴,应该不会出现踩坑&#xff0c;但是我喜欢自己手动敲一遍&#xff09;&#xff0c;发现几个坑&#xff0c;因而总结下经验&#xff0…

主成分分析和因子分析区别与联系

主成分分析可以简单的总结成一句话&#xff1a;数据的压缩和解释。常被用来寻找判断某种事物或现象的综合指标&#xff0c;并且给综合指标所包含的信息以适当的解释。在实际的应用过程中&#xff0c;主成分分析常被用作达到目的的中间手段&#xff0c;而非完全的一种分析方法。…

luogu P1519 穿越栅栏 Overfencing

题目描述 描述 农夫John在外面的田野上搭建了一个巨大的用栅栏围成的迷宫。幸运的是&#xff0c;他在迷宫的边界上留出了两段栅栏作为迷宫的出口。更幸运的是&#xff0c;他所建造的迷宫是一个“完美的”迷宫&#xff1a;即你能从迷宫中的任意一点找到一条走出迷宫的路。给定迷…

css实现简单的告警提示动画效果

需求&#xff1a;css实现简单的告警提示动画效果&#xff0c;当接收到实时信息的时候&#xff0c;页面弹出告警信息的动画效果<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>css实现告警提示动画</…

程序员的八个级别

2009年4月6日 陈皓 在面试时&#xff0c;你可能会被经常问到“在未来5年&#xff0c;你想干什么&#xff1f;”&#xff0c;这可能是一个比较难回答的问题。在中国&#xff0c;答案一般可能会是Team leader&#xff0c;Manager&#xff0c;或是Architect&#xff0c;Specialist…

一个具有Spring Boot,Spring Security和Stormpath的简单Web应用程序-15分钟

建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; 更新 &#xff1a;我们最近发布了对…

javafx2_JavaFX 2 GameTutorial第5部分

javafx2介绍 这是与JavaFX 2 Game Tutorial相关的六部分系列的第五部分。 我知道自从我写关于游戏的博客以来已经有很长时间了&#xff0c;但希望您仍然与我在一起。 如果您想回顾一下&#xff0c;请阅读第1部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分和第4 部分 &#…

史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)

转载请标明出处&#xff1a; 原文首发于&#xff1a;https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f2-ribbon/ 本文出自方志朋的博客 在上一篇文章&#xff0c;讲了服务的注册和发现。在微服务架构中&#xff0c;业务都会被拆分成一个独立的服务&#xff0c;服务与服…

忽略已检查的异常,所有出色的开发人员都在这样做–基于600,000个Java项目

Github和Sourceforge上超过600,000个Java项目中的异常处理概述 Java是使用检查异常的少数语言之一。 它们在编译时强制执行&#xff0c;并且需要某种处理。 但是……实践中会发生什么&#xff1f; 大多数开发人员实际上处理任何事情吗&#xff1f; 以及他们如何做到的&#xf…

使用Boxfuse轻松在云中运行Spring Boot应用程序

几天前&#xff0c;我开始构建一个将使用REST API检索和存储数据的iOS应用。 该REST API将是我也必须构建的服务器应用程序。 由于我熟悉Java和Spring &#xff0c;因此决定使用Spring Boot作为框架。 为了能够在我的iPhone上使用它&#xff0c;如果我可以在服务器而不是我自己…