当前位置: 首页 > 后端技术 > Java

猫头鹰深夜翻译:Java异常的趣谈

时间:2023-04-01 20:53:16 Java

前言Java异常类(Exception)是一组用来处理异常程序行为的类。在这篇文章中,我将介绍如何使用Java异常类,以及如何在程序中设计Java异常系统。Exception类是Java系统中非常重要的一部分,每个程序员都必须熟悉并掌握它。Java异常携带的信息量超乎你的想象。JavaException本身的结构设计可以为开发者提供很多信息(如果开发者能够正确使用这种结构的话)。Exception结构如下图所示:Throwable是整个异常结构的父类,它有两个子类,分别是Error和ExceptionJavaError,Error类代表异常场景。一旦发生Error异常,整个应用程序可能会崩溃。JavaExceptionException不同于Error类。当出现此类异常时,程序可以尝试恢复并继续运行。Exception有以下两种类型,运行时异常(RuntimeException)和非运行时异常(NotRuntimeException):非运行时异常也成为checkedexception,这种异常和Error异常很相似,两者的区别在于在程序中抛出checkedexception时恢复正常的几率更高。Checked和Unchecked异常Checked异常迫使开发人员在程序中处理它们或再次抛出它们。如果重新抛出已检查的异常,则需要使用throws语法在方法中声明该异常。相反,未经检查的异常不需要特殊处理。这种设计结构意味着未主动处理的未经检查的异常将被抛给根类。Java中如何处理异常Java中有两种处理异常的方法:在当前方法中处理它们或者重新抛出它们。您可能需要父异常处理程序,或执行一些其他特定逻辑,例如重试。如上所示,我们可以将异常分为三类:Checked、Runtime和Error。它们在不同的场景中被抛出,代表着程序能够恢复到什么程度。最乐观的是Checked异常,Runtime异常相对不太容易恢复,最差的是Error类型的异常。了解了异常的类型后,我们可以尝试回答以下问题:程序目前的情况有多糟糕?问题的原因是什么?如何解决这个问题?需要重启JVM?需要重写代码吗?熟悉异常意味着我们可以推测程序哪里出了问题并尝试修复它。后面的章节会展示几个经典的异常场景并分析原因(假设程序已经通过了编译和自测阶段)分析Error异常从最严重的Error异常开始。最常见的Error异常如下图所示:大多数情况下,只需修改JVM的配置或添加缺失的依赖即可。当然也有少部分场景需要代码优化。Checked异常分析对于Checked异常,通常意味着程序可能会通过某种方式从这个异常中恢复过来,比如重试。下面会给出几个比较经典的Checked异常,其中一些可能是其他异常的父类,分析时会忽略这些异常中的关联。那么,这张表说明了什么?如果你仔细看,你会发现大多数时候你不需要修改代码,甚至不需要重启应用程序。分析运行时异常运行时异常是最常见的异常。一般而言,Checked和Error异常不需要更改代码,但Runtime异常通常意味着必须修改代码才能解决问题。下表列出了最常见的运行时异常:可见运行时异常对程序造成的破坏有多大。它会导致代码修复、程序员压力增加和业务损失。Checked异常导致的代码污染根据Checked异常的定义,开发人员应该通过Checked异常来抛出所有可恢复的问题。但这也意味着需要在方法定义中声明异常,调用者必须添加三四行try-catch逻辑来处理异常。如果程序中充斥着这样的代码片段,将极大地影响代码的可读性。因此,我推荐使用RuntimeException来进行异常管理。甚至在设计API时,也可以在方法中定义Runtimeexception,并添加注释来辅助调用者理解。API调用者可以决定是处理这个异常还是继续向上抛。原文链接:dzone.com/articles/java-exceptions-1