最常见的Java异常及其对Java开发人员的评价
我知道我说在完成视频之前我不会张贴帖子,但这一直困扰着我。 至于视频的更新,我有些懒散,有些忙碌,但是我已经准备好记录第一集,这是我第一次有机会,而且我不需要太多的编辑。 无论如何,还是今天的话题。
Takipi博客最近发布了两篇有关前10个 最常抛出的异常 (已记录)的文章。 这10个例外占这些日志中97%的例外。 我想按从最常见到最不重要的顺序列出这些例外情况,并简要说明这些例外情况。
- 空指针异常
- NumberFormatException
- IllegalArgumentException
- RuntimeException
- IllegalStateException
- NoSuchMethodException
- ClassCastException
- 例外
- ParseException
- 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
最常见的Java异常及其对Java开发人员的评价相关推荐
- java开发常见异常_最常见的Java异常及其对Java开发人员的评价
java开发常见异常 我知道我说过在完成视频之前我不会发帖,但这一直困扰着我. 至于视频的更新,我有些懒散,有些忙碌,但是我已经准备好记录第一集,这是我第一次有机会,而且我不需要太多的编辑. 无论如何 ...
- 视频教程-Java异常原理剖析-Java
Java异常原理剖析 曾任职于国内知名校企合作单位.超过6年教育行业工作经验.曾在多家线上教育平台讲授过公开课.和VIP课程,擅长讲授JAVASE.JAVAWEB相关的课程.授课氛围清晰自然,讲解内容 ...
- java异常总结---1.java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.support.OpenSessio
java异常总结---1.java.lang.ClassNotFoundException: org.springframework.orm.hibernate4.support.OpenSessio ...
- java异常_聊聊Java中的异常及处理
前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 ...
- java 异常 抛 效率_一文带你理清Java异常体系,提高开发效率
一.概述 我们在项目开发的过程中使用异常是必不可少的事情,那么异常会带来哪些好处呢? 我们知道异常带来的最明显的好处是,它能够降低错误处理代码的复杂度.不使用异常的话,我们就必须检查一些特定的错误,并 ...
- java redis 面试题_Java开发人员怎么面试 常见Redis面试题有哪些
Java开发人员怎么面试?常见Redis面试题有哪些?Redis是目前各大企业都在使用的人们技术,也是企业选拔人才时考核的一个难题.有很多同学只是简单了解Redis的应用,但对于为什么要用Redis以 ...
- java 异常_学习Java,你需要知道这些Java异常
文章目录 异常处理的概念 异常的基本概念 Java异常处理机制的优点 错误的分类 异常的分类 预定义的一些常见异常 异常的处理 抛出异常 捕获异常的语法 生成异常对象 声明自己的异常类 异常处理的概念 ...
- c 异常 java异常_C ++和Java中异常处理的比较
如今,几乎所有面向对象的语言都具有异常处理功能.在C ++和Java中,我们也可以获得这种功能.C ++中的异常处理和Java中的异常处理之间有一些相似之处,例如在两种语言中,我们都必须使用try-c ...
- java 异常 不抛,java中不捕获或抛出的异常
java中不捕获或抛出的异常 发布时间:2020-06-25 14:29:16 来源:亿速云 阅读:137 作者:Leah 这期内容当中小编将会给大家带来有关java中不捕获或抛出的异常,文章内容丰富 ...
最新文章
- java线程安全的set_Java并发编程之set集合的线程安全类你知道吗
- 腾讯面试题:char 和 varchar的最大长度是多少,以及他们之间的区别(看完你就能和面试官笑谈人生了)
- python做电脑软件-程序员带你十天快速入门Python,玩转电脑软件开发(二)
- nodejs 当前文件路径_NodeJs的几种文件路径
- 7、实例:计算课程结束的日期
- 匿名内部类的使用总结
- Qt下使用QtSql连接sqlite3所遇到的问题总结
- oracle 中的日志在处理,ORACLE在存储过程中记录日志的处理包
- Python操作文件目录
- bootstrap页面布局
- java 反序列化 怎么知道类_理解java中的序列化与反序列化
- Android的深度定制版阿里云os(Android的山寨)
- android5开机动画耗时,Android 开机速度优化
- SQL注入-DNSlog注入(手工加工具使用)
- fluidsim元件库下载_模块七FluidSIM软件应用 (1)
- Android reboot那点事儿
- angular directive 入门
- 初学Android,图形图像之使用Canvas,Paint绘图(二十五)
- 自媒体人必备神器,200w+自媒体人都在用
- Xshell密钥认证