java开发常见异常
我知道我说过在完成视频之前我不会发帖,但这一直困扰着我。 至于视频的更新,我有些懒散,有些忙碌,但是我已经准备好记录第一集,这是我第一次有机会,而且我不需要太多的编辑。 无论如何,还是今天的话题。
Takipi博客最近发布了两篇有关前10个 最常抛出的异常 (已记录)的文章。 这10个例外占这些日志中97%的例外。 我想按从最常见到最不重要的顺序列出这些例外情况,并简要说明这些例外情况。
- 空指针异常
- NumberFormatException
- IllegalArgumentException
- RuntimeException
- IllegalStateException
- NoSuchMethodException
- ClassCastException
- 例外
- ParseException
- InvocationTargetException
空指针异常
NPE排在这个名单上,甚至排在榜首,这对很多人来说并不奇怪,但事实并非如此! 这些异常是可以避免的。 有两种相对著名的方法可以避免Java中已经存在的空对象模式和Optional类型, 并且如果您切换到具有空安全性的语言(例如Kotlin,它与Java完全兼容),您几乎不需要考虑避免使用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
真? 真?! 那只是无济于事,特别是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
java开发常见异常