有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java什么是可恢复和不可恢复的异常或错误

我试图理解错误和异常之间的区别,但它看起来是一样的,在Oracle Official tutorials我读到了这一行

Checked exceptions are subject to the Catch or Specify Requirement. All exceptions are checked exceptions, except for those indicated by Error, RuntimeException, and their subclasses.

现在我想这是一样的。但在搜索了更多之后,我发现了一些理论上的差异

异常:可恢复

错误:不可恢复

例外示例:

try{
  read file
}
catch(FileNotFoundException e){
// how I can recover here? can i create that file?
// I think we can just make log file to continue or exit.
}

错误示例:

try{
      try to locate memory
}
catch(MemoryError e){   
    // I think we can just make log file to continue or exit.
}

已编辑 我问的是可恢复的和不可恢复的


共 (3) 个答案

  1. # 1 楼答案

    不可恢复的错误是指那些使应用程序处于未定义状态的错误,如数据库连接中断或端口关闭。您可以处理错误并继续执行,但这没有意义。像Rust和Go这样的现代语言使用panic这个名称来表示这些性质的错误,以明确区分。如果可能的话,最好是记录错误并退出应用程序

    一个可恢复的错误是我们可以优雅地处理的,比如被零除或验证错误。这是预期的结果,其行为包含在语言规范中。是的,当发生可恢复的错误时,应用程序的行为不稳定,但我们可以控制它或解决它

  2. # 2 楼答案

    所有继承自类异常但不直接或间接继承自类RuntimeException的类都被视为检查异常。此类异常通常是由不受程序控制的情况引起的。 范例

    • 在文件处理中,如果不打开文件,程序将无法打开 存在

    可恢复的 所以很容易知道,如果一个文件不存在,那么你不需要打开该文件,因此它是可恢复的

    RuntimeException(包java.lang)的直接或间接子类的所有异常类型都是未经检查的异常。这些通常是由程序代码中的缺陷引起的。 范例

    • ArrayIndexOutofBounds概念
    • 算术异常
    • 错误

    无法恢复 因此,SWHY程序无法从此类错误或异常中恢复

  3. # 3 楼答案

    正如你已经发现的,错误意味着你有严重的麻烦。在catch块中,您可能可以执行类似于日志记录的操作,但基本上就是这样

    不可恢复异常主要是运行时异常,如NullPointerException。它们通常是程序代码中的一些漏检的结果。因此,解决方案通常是修复代码

    可恢复异常是指您事先知道可能发生并采取某些措施的情况。想象一下调用某个后端服务的web应用程序。该服务可能可用,也可能不可用,这可能会导致操作执行失败。因此,您有一个选中的异常,在这种情况下,很可能是您抛出的自定义异常,然后在前端代码中以一种方式处理它,您可以告诉用户,很抱歉后端服务xy已关闭,请稍后重试或联系支持人员

    可恢复并不意味着应用程序可以做一些事情来解决异常的原因,尽管在某些情况下这是可能的