java开发常见异常_最常见的Java异常及其对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类型, 并且如果您切换到具有空安全性的语言(例如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开发常见异常

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

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

相关文章

vue 动态变量名_【告别复制粘贴】动态模板生成小技巧

? 这是第 75篇不掺水的原创,想要了解更多,请戳上方蓝色字体:政采云前端团队关注我们吧~本文首发于政采云前端团队博客:告别复制粘贴:动态模板生成小技巧https://www.zoo.team/article/dynamic-template-ge…

【安卓开发 】Android初级开发(六)Activity生命周期

Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.d("Activity生命周期","onCreate创建页面");}Overrideprotected void onStart() {super.onStart();Log.d(…

jboss项目导入idea_如何导入任何JBoss BRMS示例项目

jboss项目导入idea在过去几周内,JBoss BRMS演示的用户反复询问我以下内容时,会给您这些提示和技巧: “如何将与各种JBoss BRMS演示项目相关的项目导入到我自己的现有安装中?” 这意味着用户希望在个人安装产品时有一个示例项目&…

amos看拟合度在哪里看_哪里可以看亲爱的热爱的电视剧全集

由杨紫、李现、胡一天、张格出演的暖心甜宠剧《亲爱的,热爱的》正在热播中。该剧根据墨宝非宝小说《蜜汁炖鱿鱼》改编,讲述了一场高智商与高情商的甜萌梦幻爱情故事。剧中李现饰演的高冷G神和杨紫饰演的萌妹学霸,从开头的一见钟情到后面的相处…

【开源项目】Android下自定义HASH【支持一个key对应多个value--根据key排序】

package com.peace.love.carpo_test.tool;import java.util.List; import java.util.Map; import java.util.Set;/*** <p>Can save multiple the value of the map.</p>* Created in 2021/2/20.** author 一笑奈何;*/ public interface HongDou_MultiValueMap<K…

jaxb xml配置_JAXB和Log4j XML配置文件

jaxb xml配置Log4j 1.x和Log4j 2.x均支持使用XML文件来指定日志记录配置 。 这篇文章探讨了与使用JAXB通过Java类处理这些XML配置文件相关的一些细微差别。 本文中的示例基于Apache Log4j 1.2.17 &#xff0c; Apache Log4j 2.6.2和Java 1.8.0_73&#xff08;带有JAXB xjc 2.2.…

multiprocessing.queue取数据要加锁么_干货 | 小程序多页面接口数据缓存

小程序里面多个页面&#xff0c;有时候会需要用到同一个接口的数据。而这些数据全局来说只需要拉取一遍&#xff0c;如果要存到缓存&#xff0c;要怎么保证其他页面取缓存的时候&#xff0c;数据已经拉取回来了呢&#xff1f;答案是多页面接口数据缓存实现。思路设计其实这种场…

【安卓开发 】Android初级开发(七)MD5加密

//MD5加密public String encrypt(String raw){String md5Str raw;try {MessageDigest md MessageDigest.getInstance("MD5");md.update(raw.getBytes());byte[]encryContext md.digest();int i ;StringBuffer buf new StringBuffer("");for (int offse…

apache.camel_Apache Camel 2.18 –即将推出的功能的亮点

apache.camel骆驼骑士正在忙于即将发布的Apache Camel 2.18版本。 当我们动态更新发行说明时 &#xff0c;这是一种快速查看即将发生的情况的方法。 我只是想在夏天在这里进行快速更新&#xff0c;到目前为止&#xff0c;我们已经完成了简短的重点介绍。 随着发行版的临近和文档…

【安卓开发 】Android初级开发(八)WebView网页

1.网页的基本组成 2.WebView的常用方法 WebView webView findViewById(R.id.webvv);//加载线上网页webView.loadUrl("https://www.baidu.com");//加载SD卡上的html文件,Environment.getDownloadCacheDirectory().getPath()为获取SD卡根目录路径webView.loadUrl(&quo…

python整数加法计算器_Python应用实例赏析2.1简单计算

在日常应用中&#xff0c;我们会经常使用计算器进行计算&#xff0c;有些时候普通计算器的功能不能满足需要&#xff0c;例如使用计算机系统自带的计算器&#xff0c;计算不能超过32位数&#xff0c;手机自带计算器不能超过15位等(我的电脑和手机)&#xff0c;也可能计算需要的…

functor_纯Java中的Functor和Monad示例

functor本文最初是我们使用RxJava进行React式编程的附录。 但是&#xff0c;尽管与React式编程非常相关&#xff0c;但对monad的介绍却不太适合。 因此&#xff0c;我决定将其取出并作为博客文章单独发布。 我知道&#xff0c;“ 我对单子的自己的&#xff0c;一半正确和一半的…

【开源项目】Android开发内置App自动升级

1.准备工作&#xff0c;首先需要在AndroidManifest.xml中的application中加入以下内容 <providerandroid:name"android.support.v4.content.FileProvider"android:authorities"需要更新app的包名.fileprovider"android:grantUriPermissions"true&q…

智能雷达物位计说明书_?浅谈人工检尺法和雷达液位计在油罐液位测量中的应用...

近年来&#xff0c;油罐液位的测量工作已成为工业测量中十分重要的部分。过去&#xff0c;在油罐测量方面&#xff0c;人工检尺法是进行液位测量的主要方法之一&#xff0c;但随着科技的发展和进步&#xff0c;雷达液位计等智能化液位测量设备使油罐的监控和测量方式趋向于多元…

【安卓开发 】Android初级开发(九)Android中封装View提供接口供点击事件回调的方法及使用

自古一楼先上图 package com.example.mydialog;import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.Window; i…

spring 自定义日志_Spring和Hibernate的自定义审核日志

spring 自定义日志如果您需要对所有数据库操作进行自动审核 &#xff0c;并且正在使用Hibernate…&#xff0c;则应使用Envers或spring data jpa auditing 。 但是&#xff0c;如果由于某些原因您不能使用Envers&#xff0c;则可以使用Hibernate事件侦听器和spring事务同步来实…

打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...

前天被老板削了一顿&#xff0c;说我打印的表格连标题行都没有&#xff01;昨天被老板削了两顿&#xff0c;说我打印的表格太浪费纸&#xff01;今天被老板削了五顿&#xff0c;说我表格打印出来的数据居然是错误&#xff01;……在挨削了很多次之后&#xff0c;学会了一些技巧…

机器学习java_如何开始使用Java机器学习

机器学习java什么是开始使用Java机器学习的最佳工具&#xff1f; 他们已经存在了一段时间&#xff0c;但如今看来&#xff0c;每个人都在谈论人工智能和机器学习。 对于科学家和研究人员而言&#xff0c;它已经不再是秘密&#xff0c;几乎可以在任何新兴技术中实现。 在下面的…

【科学工具】矩阵篇

# codingutf-8 import numpy as np# 矩阵加法 Matrix addition ,同型矩阵可以加减操作&#xff0c;即行列数相等 A np.array([[3, 2, 1], [1, 2, 3]]) B np.array([[3, 2, 1], [1, 2, 3]]) print(A B)# 矩阵数乘 Matrix multiplication C np.array([3, 2, 1]) print (C * 2…

nginx delete form表单 收不到参数_HTTP 文件上传的一个后端完善方案(NginX)

(给PHP开发者加星标&#xff0c;提升PHP技能)转自&#xff1a;林伯格https://breeze2.github.io/blog/scheme-nginx-php-js-upload-process前言很多网站都会有上传文件的功能&#xff0c;比如上传用户头像&#xff0c;上传个人简历等等&#xff0c;除非是网盘类的网站&#xff…