最常见的Java异常及其对Java开发人员的评价

我知道我说在完成视频之前我不会张贴帖子,但这一直困扰着我。 至于视频的更新,我有些懒散,有些忙碌,但是我已经准备好记录第一集,这是我第一次有机会,而且我不需要太多的编辑。 无论如何,还是今天的话题。

Takipi博客最近发布了两篇有关前10个 最常抛出的异常 (已记录)的文章。 这10个例外占这些日志中97%的例外。 我想按从最常见到最不重要的顺序列出这些例外情况,并简要说明这些例外情况。

  1. 空指针异常
  2. NumberFormatException
  3. IllegalArgumentException
  4. RuntimeException
  5. IllegalStateException
  6. NoSuchMethodException
  7. ClassCastException
  8. 例外
  9. ParseException
  10. InvocationTargetException

空指针异常

NPE排在此列表中,甚至排在榜首,这对大多数人来说并不奇怪,但事实并非如此! 这些异常是可以避免的。 有两种相对著名的方法可以避免Java中已经存在的空对象模式和Optional类型, 并且如果您切换到具有空安全性的语言(例如与Java完全兼容的Kotlin),则几乎不需要考虑避免使用NPE。

我们都应该通过采取良好的预防措施(除非正常的空值检查是从第三者那里获得的,除非正常情况下,我不认为正常的空值检查是最佳方法),才能努力防止这些异常。有助于预防NPE的语言。

NumberFormatException和ParseException

ParseException在列表中排名第9,但它与NumberFormatException紧密相关,我发现确实令人不安的是, 这两个都位于前10名中,其中之一是#2。 两者都与将String数据解析为其他内容有关,我不禁认为,由于这些异常的普遍性,开发人员并未充分利用类型系统来发挥自己的优势, “字符串型”编程。

现在,这些异常中的很大一部分可能是由于用户输入错误或某种序列化问题引起的,但那里可能也存在太多“字符串类型”的对象。 由错误的用户输入引起的错误可能应该在通过解析器运行之前进行检查,而这恰恰是初始输入验证的一部分。

我的意思可能是我想说的更苛刻。 在许多情况下,这些都是很难避免的例外,将它们排在前十名也就不足为奇了。

NoSuchMethodException和InvocationTargetException

这两种情况都是在反思中发生的,我可能不会多说,但是我非常不喜欢反思。 几乎总是有另一种方式。 那样的方法可能并不容易,但是我相信它总是总会更好,因为事情变得更加明确和易于理解,并且您会从错误中获得更多的编译器帮助。

肯定有一些避免反射的异常(例如,使用反射运行所有测试的JUnit),但是我敢肯定,这些异常中的大多数都是无缘无故抛出的,使用常规编程技术可以避免问题。

要查看关于避免像反射这样的“魔术”的真正好话,请查看“ 8行代码” (跟随起来很困难,因为视频只看着扬声器,而且他在幻灯片中回跳得还不错,所以甚至很难跟着幻灯片一起跟随)。 这也是我选择Java Spark而不是Spring的原因之一。

IllegalArgumentException

我实际上不介意出现这种情况。 这意味着很多人正在检查他们的输入,并确保他们不会搞砸一切。 有一些方法可以减少计数,例如使用真正强壮的打字,例如Object Calisthenics的建议(规则3和4),但这是一组故意过分热心的规则,可以帮助您学习,并且遵循它只是将IllegalArgumentException进一步推到一个位置。

RuntimeException和异常

真? 真?! 那只是无济于事,特别是Exception。 我可以理解将异常转换为运行时异常,但仅使用RuntimeException并不是最佳方法。 为此创建一个自定义异常,即使它与WrappedException一样通用。

IllegalStateException

同样,良好的OO设计可以解决此问题,但是有时很难提出这些设计。 我会轻松一点的。

ClassCastException

我不知道这件事的感觉。 我担心其中有多少可能是由于反射或在泛型可用时使用原始类型引起的。 在这两种情况下,都需要停止。 但是我也知道,有很多地方真的很难避免,因此我不会对此进行竖琴演奏。

结论…

该例外列表中令我最担心的是Java代码中普遍存在的NPE和反射问题的数量。 其他许多人都与弱的OO设计有关,但是我知道那里有很多新手或经验不足的开发人员,或者他们的问题使他们很难和/或不值得进行更深入的开发。 我不得不放开那些案件。

请读者,如果您从中学习到任何东西,请了解一下,将来可以通过学习如何解决null问题(通过使用null安全语言或使用Optional或Null Object模式)来避免很多麻烦。尝试看看您可以从代码中获取多少反射和注释。

翻译自: https://www.javacodegeeks.com/2016/06/common-java-exceptions-says-java-devs.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值