java中什么时候应用异常_生产Java应用程序中的十大异常类型-基于1B事件

java中什么时候应用异常

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

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

来吧。

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

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

十大例外

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

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

自我检查

真数据

1. NullPointerException – 70%的生产环境

是。 臭名昭著的NullPointerException位于#1。 空参考文献的发明者查尔斯·安东尼·理查德·霍尔(Sir Charles Antony)

“我称之为我十亿美元的错误。 它是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是本帖子中涵盖的1000多个应用程序中的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异常的世界确实非常丰富多彩,令人惊讶的是,前10个异常对我们的日志有多大影响。 所有记录的错误中有97%来自10个唯一异常。

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

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

java中什么时候应用异常

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

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

相关文章

C++ 11 深度学习(十四)C++类

(一)综述:类是我们自己定义的数据类型 设计时要考虑的角度: 站在设计和实现的角度来考虑;站在使用者的角度考虑;父类,子类之间的考虑; (二)explicit 首先, C中的explicit关键字只…

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

手动编译 lombok在本文中,我们将看到如何在常规Java代码中使用lombok来最大程度地减少代码长度和冗余。 什么是Lombok? Lombok,一个编译时注释预处理器,有助于在编译时注入一些代码。 在详细介绍之前,我要求您应该从…

mysql超大表处理方式是_第29问:MySQL 的复制心跳说它不想跳了

问题最近年底,大家的数据库经常跑批量大事务,会发现复制突然断开,报错“心跳与本地信息不兼容”:会是什么原因?实验我们先来复现一下,再进行分析。宽油,做一对主从数据库:我们先造一…

sap 分摊分配不产生会计凭证的原因_SAP软件的物料分类账功能

物料账介绍物料分类账(Material Ledger)是SAP财务模块的重要功能之一,用于对标准价计价的物料进行差异处理。激活ML后,系统会在"工厂物料"层(或更细的层次)为每个物料建立子账簿,记录该物料在各个期间的数量、价值变化情况。月底运…

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

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

数据结构【队列专题】

先进先出(First In First Out,FIFO)的线性序列,成为“队列”。 队列也是一种线性表,只不过它是操作受限的线性表,只能在两端操作: 一端进,一端出。进的一端成为队尾(re…

oracle安装卡在create inventory_滴滴云服务器上安装Oracle12cR2单实例数据库

一、相关说明Oracle数据库是由美国甲骨文公司推出的一款优秀的关系型数据库。当前最新版为Database 19c。本文简述Oracle Database 12cR2在滴滴云主机上的安装过程。如需更权威的指导方法请参考Oracle官方安装文档。二、环境概述一台DC2云主机(2c4g)一个…

【WebRTC---序篇】(二)Windows平台WebRTC源码编译

需要准备的东西 (一)一个强大的梯子(懂得都懂)!!!!!!!!! (二) 下载depot_tools Windows指定地址必须在此下载 打开这个页面,找 install depot_tools 这个关键字 请把他解压到C盘,并且设置到PATH环境变量种,且让它处于最顶端。 其他需要设置的额外变量 DEPOT_TOOLS_…

商品管理后台发布商品时,规格值组合的前端交互的实现逻辑

方案1:先计算总行数,再循环填充规格值 根据每种规格值数量计算得到总行数,如果下图有3种规格:长度、重量、大小,规格值个数分别为:3、3、2,3x3x218行。 规格种类有3种,于是写3层嵌套递归循环填…

【WebRTC---源码篇】(五)WebRTC视频引擎

1. 视频数据的采集时间 2.视频分发器VideoBroadCaster

activiti异步执行_对基于消息队列的Activiti异步执行器进行基准测试

activiti异步执行一点历史 永无休止的一件事是,Activiti在某些非常大的规模的大型组织中的使用方式。 过去,这导致了各种优化和重构,其中包括异步执行器-替换旧的作业执行器。 对于未启动的用户:这些执行器在流程实例中处理计时器…

chrome浏览器设置网页快速到顶部和到底部的方法

鼠标移到浏览器的书签任意位置,点击鼠标右键添加书签,在添加书签的窗口输入名称和js代码,然后把书签移到浏览器书签栏的最左侧,这样每次浏览网页就可以使用快捷方式快速到底部或者顶部了。 快速到顶部的js代码:javascr…

apache pdfbox_Apache PDFBox命令行工具:无需Java编码

apache pdfbox在博客文章Apache PDFBox 2中 ,我演示了将Apache PDFBox 2用作从Java代码中调用的库来操作PDF。 事实证明,Apache PDFBox 2还提供了可以直接从命令行直接使用的命令行工具 ,而无需其他Java编码。 有几种命令行工具可用&#xff…

【WebRTC---源码篇】(六)NACK判断包位置的关键算法

首先保证a与b不相等 template <typename T, T M = 0> inline bool AheadOf(T a, T b) {static_assert(std::is_unsigned<T>::value,"Type must be an unsigned integer.");return a != b && AheadOrAt<T, M>(a, b); } template <type…

spring集成mq_使用Spring Integration Java DSL与Rabbit MQ集成

spring集成mq我最近参加了在拉斯维加斯举行的2016年Spring大会 &#xff0c;很幸运地看到了我在软件世界中长期敬佩的一些人。 我亲自遇到了其中的两个人&#xff0c;他们实际上合并了几年前我与Spring Integration相关的一些次要贡献– Gary Russel和Artem Bilan &#xff0c;…

MyEclipse 如何使用断点调试

文章目录1、在需要的代码行处打断点右键添加断点双击添加断点快捷键添加断点2、以debug模式开启服务器通过debug执行列表&#xff0c;选择服务器启动当前程序按右键&#xff0c;选择debug as&#xff0c;再选择服务器启动开发视图底部server列表选择服务器开启debug视图&#x…

【WebRTC---源码篇】(八)音频数据采集

ADM的创建 1.Audio Device Module是在逻辑层与硬件设备层之间进行了转换,需要使用什么功能,调用什么接口就可以,不要管底层平台实现。 2.AudioDeviceModule是一个接口类,定义了一系列接口。最终实现由子类AudioDeviceModuleForTest实现,其中包括一些测试函数(对设备的…

jsf netbeans_NetBeans Java EE技巧9:从数据库创建JSF应用程序

jsf netbeans您需要非常快速地创建数据库前端吗&#xff1f; NetBeans IDE允许人们以很少的代码就为一组数据库表开发JSF应用程序前端。 现在&#xff0c;本教程是一个老歌&#xff0c;但是一个好东西……对于那些不了解它的人来说&#xff0c;值得再次提及。 首先&#xff0c…

cloud foundry_介绍“又一个” Cloud Foundry Gradle插件

cloud foundry在与两个同事&#xff08;感谢Mark Alston和Dave Malone &#xff01;&#xff09;一起使用自动Jenkins管道部署Cloud Foundry应用程序的过程中&#xff0c;我决定尝试编写Gradle插件来执行一些通常需要完成的任务使用命令行Cloud Foundry Client完成 。 引入一个…

Oracle/MySQL/Java数据类型对应表

文章目录数据类型对照表MySQL 的 int、bigint、mediumint、smallint、tinyint 的对比关于 MySQL 整型显示位数的问题关于 MySQL 的 timestamp关于 JDBC 类型数据类型对照表 MysqlOracleJavaBIGINTNUMBER(19,0)java.lang.LongBITRAWbyte[]BLOBBLOB RAWbyte[]CHARCHARjava.lang.…