Java 区分可恢复异常和不可恢复异常?

Java 区分可恢复异常和不可恢复异常?,java,exception,Java,Exception,根据Oracle的定义,检查异常和运行时异常之间的一个不同点是“可恢复能力”。但是,我不明白如何区分可恢复异常和不可恢复异常之间的区别。有人告诉我: “可恢复异常”“意味着它在异常发生时(由程序员)定义了一个场景。而且,“可恢复异常”涉及外部错误(而不是编程错误) “不可恢复异常”“意味着当异常发生时,您无法执行任何操作,这种情况下的解决方案只是修复源代码(重新编写代码)。“不可恢复异常”涉及编程错误(API错误、方法参数错误等) 但是,“可恢复”的概念并不意味着应用程序可以做一些事情来解决异

根据Oracle的定义,检查异常和运行时异常之间的一个不同点是“可恢复能力”。但是,我不明白如何区分可恢复异常和不可恢复异常之间的区别。有人告诉我:

  • 可恢复异常”“意味着它在异常发生时(由程序员)定义了一个场景。而且,“可恢复异常”涉及外部错误(而不是编程错误)
  • 不可恢复异常”“意味着当异常发生时,您无法执行任何操作,这种情况下的解决方案只是修复源代码(重新编写代码)。“不可恢复异常”涉及编程错误(API错误、方法参数错误等)
  • 但是,“可恢复”的概念并不意味着应用程序可以做一些事情来解决异常的原因,即使在某些情况下这是可能的
但我不清楚两者的区别。因此,我给出了以下一些场景:

  • 第一个异常:从不存在的文件读取(FileNotFoundException
磁盘上不存在读取文件X

  • 第二个异常:将数字除以0(算术异常
将一个数字除以0(例如:1/0)

  • 第四个异常:调用null对象(NullPointerException
对象X=null,参考X(例如函数Y调用X…)

  • 第五个异常:将无效字符串转换为数字(NumberFormatException
字符串X至少包含一个非数字字符,请将X转换为数字

我不知道为什么这个异常是运行时异常,因为我认为当这个异常发生时,用户只需更改另一个字符串(可能是通过UI)即可继续程序,而无需重新编写代码,例如:

字符串X=“ba1”->整数Y(不可能)

change X=“123”-->Integer Y(可能),此操作不需要修复代码(???)

例如:


主要是第5种情况,我不知道为什么它是运行时异常,而程序员对源代码(重写代码)无能为力。您的示例非常糟糕。他们假设用户能够通过某个UI更改几乎任何内容。在
ArrayIndexOutOfBoundsException
等中肯定不是这种情况。在任何情况下,都没有明确的区别,这在很大程度上取决于程序的业务逻辑。例如,用户选择的文件不应出现
FileNotFoundException
,因为您可以事先检查该文件是否存在。但是,如果您正在加载一个必须存在的文件(例如,程序的配置文件),则会出现一个未经检查的异常。谢谢Kayaman,NumberFormatException如何,我不明白为什么它是不可恢复的异常?:)不是。这是一个未经检查的例外。所有这些“可恢复”的东西只是哲学思考和思考。没有明确的逻辑,如果你用谷歌搜索一下,你应该能够找到很多关于检查与未检查争议的讨论。哦,谢谢……所以“可恢复”与否取决于每个人的思维方式和这个程序的目的……相对而言,是对的?:)确切地可恢复性(或缺乏可恢复性)唯一明显的情况是出现
错误
。它们总是表示程序员不能(或不应该)做任何事情的情况。
=>  This situation is recoverable or un-recoverable? Why?

=>  In this situation, if user choose the another file (through UI), it is the recoverable exception?
=>  This situation is recoverable or un-recoverable? Why?

=>  In this situation, if user choose the another number <> 0 (through UI), it is the recoverable exception?
=>  This situation is recoverable or un-recoverable? Why?

=>  In this situation, if user choose the another index (through UI), it is the recoverable exception?
=>  This situation is recoverable or un-recoverable? Why?

=>  In this situation, if user choose the another object not null (through UI), it is the recoverable exception?
=>  This situation is recoverable or un-recoverable? Why?

=>  In this situation, if user choose the another string (through UI), it is the recoverable exception?