Java 基础-Error和Exception

目录

一、前言

二、相同点

三、Error

四、Exception

五、不同点

六、处理 Exception 需要注意的事项

(一) 尽量不要捕获类似 Exception 通用的异常

(二) 不要“吞”了异常

(三) 不要延迟处理异常

(四) 只在需要 try-catch 的地方 try-catch, try-catch 的范围能小就小

(五) 不要通过异常来控制程序流程

(六) 不要在 finally 代码块中处理返回值或者直接 return

一、前言

这里主要是介绍 Java 中的 ErrorException,它们的共同点和不同点。

二、相同点

通过 UML 类图可以看出, Error Exception 都是继承了 Throwable 类, 在 Java 中只有 Throwable 类的实例才可以抛出(throw)或者捕获(catch),它们表示在程序运行时发生的异常或者错误情况。

三、Error

  • 通常用于表示严重的问题,这些问题通常无法再程序中处理和恢复。
  • 通常表示系统问题,不建议捕获和处理,因为它们通常表名程序已经处于无法恢复的状态。

通过 UML 图可以让我们更容易理解 Error 的构成(这里只是列举一些比较常见的,感兴趣的可以去了解一下)

四、Exception

  • 用于表示应用程序可以捕获并处理的异常情况。
  • 可以被抛出、捕获和处理,从而允许程序在遇到问题时采取适当的措施。
  • 通常表示程序中出现了某种问题,但这些问题可以通过适当的异常处理来解决,而不影响程序运行。
  • 通常可以分为运行异常(Unchecked Exception编译异常(Checked Exception

通过 UML 图可以让我们更容易理解 Exception 的构成(这里只是列举一些比较常见的,感兴趣的可以去了解一下)

  • 运行异常(Unchecked Exception):运行时异常,不需要显示捕获,继承自 RuntimeException
  • 编译异常(Checked Exception):在编译时必须显示处理(如使用try-catch块或者通过throws声明抛出)

五、不同点

从上面很明显可以看出, Exception表示可以被处理的程序异常, Error表示系统级的不可恢复错误。(这个也是面试常问的 Java 基础知识)。

六、处理 Exception 需要注意的事项

(一) 尽量不要捕获类似 Exception 通用的异常

捕获类似 IOException等详细的异常,尽量避免直接捕获整个Exception。我们在日常开发中,读代码机会往往超过写代码,捕获更详细的异常,通常能更直观的体现代码的信息,提高可读性。

(二) 不要“吞”了异常

try {
   // 业务代码
   // …
} catch (IOException e) {
    e.printStackTrace();
}

如果不把异常抛出来,或者没有输出到日志,当程序出现异常时候,很难定位到具体位置,会给后续问题定位和维护造成困难。

(三) 不要延迟处理异常

“把问题扼杀在摇篮”,在异常产生的时候就要尽可能去捕获,而不是调用好几个方法才进行捕获。

比如:有个参数为 name 的,在一开始传递的是 null 值,但你没有进行处理,函数内调用了好几个方法都携带这个参数。如果在刚开始就进行捕获,出现异常时候只需要一点信息就可以定位到问题所在的地方。

(四) 只在需要 try-catch 的地方 try-catch, try-catch 的范围能小就小

只在必要的地方(可能出现问题的地方)去捕获异常,而不是把一整段无关代码都包括到try里面,这样会给影响 JVM 对代码的优化。

(五) 不要通过异常来控制程序流程

一些可以用 if/else 条件判断的地方,就不要使用异常进行处理。异常在效率上会比条件判断更低。

(六) 不要在 finally 代码块中处理返回值或者直接 return

不要在 finally 中 进行 return 或者处理返回值,可能会导致覆盖原有的异常处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值