java 异常 最佳实践

在本文中,我们将看到处理Java异常的最佳实践。 用Java处理异常不是一件容易的事,因为新手很难理解,甚至专业的开发人员也可能浪费时间讨论应该抛出或处理哪些Java异常。 因此,最大的开发公司对如何使用它们有一套规则。

如果您是公司的新手,那么Java异常处理中各种状态的呈现方式可能会让您感到震惊。 本文将向您展示最重要的十个方面,您可以用来入门或改善异常处理。 异常是程序执行期间的异常情况。 因此,让我们讨论处理Java异常的最佳实践。

1.处理Java异常的最佳实践

1.1永远不要在catch块中使用异常

catch (NoSuchMethodException e) {return null;
}

永远不要返回“ null”而不是处理异常,它会消耗异常并永久使错误失败。 如果您不了解失败的原因,那么将来就无法阻止自己。

1.2声明您的方法可能抛出的特定检查异常

public void foo() throws Exception { //Incorrect way
}

始终尝试避免上面的代码,因为它可能完全出于拥有已检查异常的目的而造成缺陷。 有必要声明该方法可能引发的特定检查异常。 如果用户有许多已检查的异常,则用户必须将其覆盖在用户的异常中,并将信息附加到异常消息中,否则用户也可以使用代码重构。

public void foo() throws SpecificException1, SpecificException2 { //Correct way
}

1.3不要获取异常类,而是捕获特定的子类

try {someMethod();
}
catch (Exception e)
{
LOGGER.error("method has failed", e);
}

获取异常的主要问题是,如果用户稍后调用的方法将新检查的异常附加到其设计签名中,则开发人员希望用户必须处理特定的新异常。 如果用户的代码出现异常,它将永远无法理解该变化。 用户的代码错误,并且可能在运行时的某个时间点崩溃。

1.4永远不要上任何Throwable类

这是一个严重的问题,因为Java错误也可以是Throwable的子类。 错误是不可更改的条件,无法由Java虚拟机本身控制。 Java虚拟机甚至可能在任何错误时都不请求用户的catch子句。

1.5始终准确地覆盖自定义异常中的异常,以免丢失堆栈跟踪

catch (NoSuchMethodException e)
{
throw new MyServiceException("Some information: " + e.getMessage());  //Incorrect way
}

上面的命令可能会损坏主要异常的堆栈跟踪,并且总是错误的。 正确的方法是:

catch (NoSuchMethodException e) {throw new MyServiceException("Some information: " , e);  //Correct way
}

1.6记录异常或抛出异常,但不要同时执行

catch (NoSuchMethodException e) {LOGGER.error("Some information", e);throw e;
}

如上面的代码所示,抛出和记录可能会在日志文件中导致多个日志消息。 对于试图浏览各种日志的开发人员,代码中的单个问题可能会造成最坏的情况。

1.7永远不要从finally块抛出异常

try {someMethod();  //Throws exceptionOne
}finally
{cleanUp();    //If finally also threw an exception the exceptionOne will be lost forever
}

准确地说,高达cleanUp()永远不会引发异常。 在上述情况下,如果someMethod()引发异常,并且在finally块中,cleanUp()引发异常,则该方法之外的其他异常将消失,原始的第一个异常(正确的原因)将永远消失。

1.8始终仅捕获那些可以处理的异常

catch (NoSuchMethodException e)
{
throw e; //Avoid this as it doesn't help anything
}

这是一个必不可少的概念,从不捕获任何异常,因此仅在可以处理任何异常的情况下捕获任何异常,才可以在该异常中提供其他上下文数据。 如果您不能在catch块中处理它,那么最好的建议是不要仅将其重新抛出就捕获它。

1.9不要使用printStackTrace()语句

完成代码后,切勿离开printStackTrace()。 很有可能是您的同事之一,他们最终将获得其中的堆栈跟踪信息,并且对其处理方式的知识完全为零,因为它不会附加任何上下文信息。

1.10如果您不打算处理异常,请使用finally块而不是catch块

try {someMethod();  //Method 2
}
finally
{cleanUp();    //do cleanup here
}

这也是一个好习惯。 如果在您的方法内部访问某个方法2,并且方法2引发一些您不想在方法1中处理的异常,但是仍然希望进行某些清除以防万一发生异常,那么请在finally块中执行此清除。 不要使用挡块。

正如我们所讨论的,java异常处理是必不可少的,并且有多种实践可以毫无问题地处理它们。 图片中出现的最新VPN应用漏洞是Google从其平台上删除了一些最佳VPN。 根据研究人员的说法,它具有支持中间人(MITM)攻击的危险漏洞,因此它仅允许黑客阻止提供商与用户之间的通信。 甚至将所有用户重定向到黑客的邪恶服务器,而不是真正的VPN服务器。 因此,谷歌删除了它们,以保护用户免受漏洞侵害。 Google确认这种类型的漏洞仍然存在,研究人员通过Google Play安全奖励计划(GPSRP)发布了结论。 GPSRP使安全分析人员可以发现安装次数超过1亿次的应用程序的漏洞。

2.结论

本文可帮助您获得有关处理Java异常的最佳实践的完整知识。 完全了解它是必不可少的,因为,正如我们所讨论的,对于初学者和有经验的开发人员而言,这个主题都很难。

我们还讨论了google和顶级VPN应用之间的问题,即Google从其下载平台中删除了许多VPN,并提供了有关VPN应用漏洞问题的完整信息。

翻译自: https://www.javacodegeeks.com/10-best-practices-to-handle-java-exceptions.html

java 异常 最佳实践

java 异常 最佳实践_处理Java异常的10种最佳实践相关推荐

  1. 编程最佳字体_网站上使用的10种最佳装饰字体

    编程最佳字体 我们选择的字体在网站中起着主要作用. 正确的字体组合可以使您的网站脱颖而出. 此外,他们与您的品牌紧密结合,以传递正确的信息. 在各种字体样式中,装饰字体是一个不错的选择,如果您想产生影 ...

  2. 2020年10种最佳持续集成工具

    技术正呈指数级增长,并且要参与其中,组织别无选择,只能采用技术.谈论"技术"基本上意味着创建"更快,更方便"和"定性"的解决方案.为了跟上高 ...

  3. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  4. python开源流程图软件_适用于Linux的10种最佳流程图和图表软件

    图表是我们联系信息并处理其重要性的好方法. 它们有助于沟通关系和抽象信息,并使我们可视化概念. 流程图和图表工具可用于从基本工作流程图到复杂网络图 ,组织图, BPMN ( 业务流程模型和表示法 ), ...

  5. 大数据分析10种最佳数据屏蔽工具和软件

    老许今日份知识分享来了. 市场上可用的最佳开源免费数据屏蔽工具列表和比较: 数据屏蔽是用于隐藏数据的过程. 在数据屏蔽中,实际数据由随机字符屏蔽.它可以防止未经授权查看机密信息的人. 数据屏蔽的主要目 ...

  6. 改善CSS的10种最佳做法,帮助你从样式中获得最大的收益

    CSS似乎是一种非常简单的语言,很难在其中犯错误.你只需添加样式规则,就可以对网站进行样式设置了,对吗?对于只需要几个CSS文件的小型网站,情况可能就是这样.但是在大型应用程序中,样式可能会迅速失控. ...

  7. ocr 图片纠正_2020年10种最佳OCR软件(免费和付费工具) NO.6

    聪明的人都是先关注,在点赞,在收藏! OCR软件将文本图像转换为可扫描的,机器可读的在线文档. 最好的OCR软件可让您扫描任何基于图像的文档并将其存档为可编辑的PDF. 如今,这些工具使个人和企业可以 ...

  8. 【健康】增长肌肉的10种最佳食品(图)

    [健康]增长肌肉的10种最佳食品(图) 1.三文鱼.6盎司(170克)的三文鱼提供34克蛋白质,4克欧米伽-3脂肪酸,一种降低 肿痛帮助肌肉修复的健康脂肪,并且它可以帮助抑制皮质醇.(皮质醇水平下降, ...

  9. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践

    在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unche ...

最新文章

  1. python时间模块datetime模块
  2. 第14课:Spark RDD解密
  3. kb-07线段树-12--二分查找区间边界
  4. runat=server 所代表及隐含的意义
  5. mysql sql执行加载顺序
  6. Qt Creator使用FakeVim模式
  7. 买房为什么要少出首付,多贷款?
  8. 一个交易平台源码,全源无接口
  9. ElasticSearch的初级安装
  10. netty : websocketx.WebSocketHandshakeException: not a WebSocket handshake request: missing upgrade
  11. python urlopen_Python爬虫教程-02-使用urlopen
  12. 【资料整理】cisco [acl]
  13. python程序启动其他python程序_python中使用fork创建新的进程
  14. PPT,要你好看(全彩)pdf
  15. 2018-2019-1 20189221 《构建之法》第 3 周学习总结
  16. 多尺度:传统高斯金字塔,拉普拉斯金字塔及SIFT算法多尺度金字塔
  17. 网页视频无法快进播放时(刷网课)
  18. base64编码以及b' '前缀的去除
  19. Winedit修改快捷键
  20. 基于Spring boot的云客服系统实现

热门文章

  1. P1412-经营与开发【dp】
  2. P4096-[HEOI2013]Eden的博弈树
  3. 牛客国庆集训派对day6T A- 2016【矩阵乘法】
  4. P4047-[JSOI2010]部落划分【最小生成树】
  5. ssl1056-金明的预算方案【dp之有依赖的背包】
  6. [CF850F] Rainbow Balls
  7. Div1 小A抓小B tarjan双连通分量缩点+dfs
  8. 99%的面试官都会问到的Java面试题
  9. 漫画:什么是MD5算法
  10. 【php】正则无法截取\反斜杠的解决方法