最常见的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

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

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

相关文章

日志系统设计

日志系统设计 2009-12-11 00:46:58| 分类: 技术 | 标签: |字号大中小 订阅 一、重要性日志系统在整个系统架构中的重要性可以称得上基础的基础,但是这一点,都容易被大多数人所忽视。因为日志在很多人看来只是printf。在系…

bzoj 1124 [POI2008]枪战Maf 贪心

[POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 741 Solved: 295[Submit][Status][Discuss]Description 有n个人,每个人手里有一把手枪。一开始所有人都选定一个人瞄准(有可能瞄准自己)。然后他们按某个顺序开枪&#x…

核心API最佳实践——JDK日志分级

核心API最佳实践——JDK日志分级 时间:2005-10-29 08:00 来源:网管之家bitsCN.com 字体:[大 中 小]日志(Log)是什么?字典对其的解释是"对某种机器工作情况或某项任务进展情况的记载"。对于应用系统来说,日志就应该记录应…

20165234 《Java程序设计》第五周学习总结

第五周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类内部类:在一个类中定义另一个类。 外嵌类:包含内部类的类,称为内部类的外嵌类。 内部类的类体中不能声明类变量和类方法。外嵌类的类体中可以用内部类声明对象,作为…

Java日志操作总结

Java日志操作总结 (2008-04-21 17:39:06)标签: 杂谈 . 使用Jakarta Commons Logging(JCL) 1.1. 概述 Apache的开源日志组件Jakarta CommonsLogging(JCL)提供的是一个日志(Log)接口(Interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中…

4-2日装饰器,带参数的装饰器

1,函数的有用信息 from functools import wraps#引用模块 def wrapper(f): # f func1wraps(f)def inner(*args,**kwargs): #聚合#args (1,2,3)执行函数之前的相关操作ret f(*args,**kwargs) # 打散 1,2,3执行函数之后的相关操作return re…

Apache Storm:如何使用Flux配置KafkaBolt

微型框架中的助焊剂可以帮助我们定义和部署Storm拓扑。 Flux有各种包装器,可帮助您定义所需的流并初始化Bolts和Spouts(使用带有或不带有参数的构造函数,并通过反射自动调用自定义配置方法)。 您只需要使用Flux就是将其作为依赖…

java 获取当前函数名

import java.text.SimpleDateFormat; import java.util.Date; /** * Java实现类似C/C中的__FILE__、__FUNC__、__LINE__等,主要用于日志等功能中。 * * version 1.0 2011-07-13 * */ public abstract class CommonFunction { /** * 打印日志时获取当前的程序文件名、行号、方法…

美国华尔街拥抱区块链是最大的威胁

Overstock的首席执行官帕特里克伯恩宣布证券交易委员会已批准其计划在区块链上发行股票,该区块链是推动比特币数字货币的巨大在线分类账。 这是一个重要的时刻。至少在理论上,区块链可以更有效,准确和公开地跟踪股票,债券和其他金…

java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

java枚举和枚举类当Java 8即将面世时,您确定您对Java 5中引入的枚举很熟悉吗? Java枚举仍然被低估了,很可惜,因为它们比您想象的要有用,它们不仅仅用于通常的枚举常量! Java枚举是多态的 Java枚举是可以包…

Java关键字final、static使用总结

Java关键字final、static使用总结 一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承…

【SpringCloud】第五篇: 路由网关(zuul)

前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。 工具:…

ubuntu shell简介

ubuntu shell简介 (2012-03-13 19:48:09) 标签: 杂谈 分类: 虚拟机下的ubuntu8.04 1.什么是shell? shell是接受用户或应用层的命令,并将这些命令解释给底层的系统内核层,由这些内核完成相应的工作,并将结果…

如何更新Jenkins作业发布config.xml

最近,我想更新Cloudbees中的一些作业(未使用DSL定义),为每个作业添加一些属性。 好吧,我在使其工作时遇到了一些麻烦,这是我的注意事项(我使用的是Jenkins 1.651.2.1,但有可能它应与…

月下“毛景树”

Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园。 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里。爬啊爬~爬啊爬~~毛毛虫爬到了一颗小小的“毛景树”下面,发现树上长着他最…

自由口通信模式下计算机读写PLC存储区的程序

自由口通信模式下计算机读写PLC存储区的程序 2008-8-20 8:51:00 来源:摘 要:本文介绍了在自由口通信模式下,用计算机读写S7-200 PLC存储区内相邻的多个字节数据的通信程序设计方法,程序设计中采用了多种可靠性措施。 关键词&…

Zookeeper入门

ZooKeeper 是一个开源的分布式协调架,主要用来解决分布式集群中应用系统的一致性问题 本质 分布式的文件存储系统(Zookeeper文件系统监听机制),是一个基于观察者模式设计的分布式服务管理框架 zookeeper的数据结构 Zookeeper的层次模型称作Data Tree,…

【laravel5.4】重定向带参数

1、 2、重定向回上一页面 3、返回上一页面带参数 转载于:https://www.cnblogs.com/xuzhengzong/p/8715463.html

Google Protocol Buffers 2.3.0 for java 快速开始

Google Protocol Buffers 2.3.0 for java 快速开始 博客分类: Java JavaGoogleUbuntuLinux数据结构Protocol Buffers是一个平台中立,编程语言无关的,可扩展的机制,是用于结构化数据串行化的灵活、高效、自动的方法&a…

jenkins api_接触Jenkins(Hudson)API,第2部分

jenkins api这篇文章从本教程的第1部分继续。 已经快一年了,但是我终于有时间重新审视我为与Jenkins api交互而编写的一些代码。 我已经使用了部分工作来帮助管理许多Jenkins构建服务器,主要是保持插件同步以及将作业从一台机器移动到另一台机器。 在本文…