区分可恢复的异常与不可恢复的异常?

时间:2016-12-15 14:53:36

标签: java exception

基于Oracle的定义,Checked异常和Runtime异常之间的不同点之一是“可恢复的功能”。但是,我不明白如何区分可恢复异常和不可恢复异常之间的区别。有人告诉我:

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

但我不明白其中的区别。所以,我给出了如下几个场景:

  • 第一个例外:从不存在的文件中读取( FileNotFoundException

磁盘上不存在读取文件X

=>  This situation is recoverable or un-recoverable? Why?

=>  In this situation, if user choose the another file (through UI), it is the recoverable exception?
  • 第二个例外:将数字除以0( ArithmeticException

将数字除以0 (例如:1/0)

=>  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?
  • 第三个例外:调用数组中不存在的元素( IndexOutOfBoundsException

数组X的长度为N,调用X [-1]或X [N + 1]是不可能的

=>  This situation is recoverable or un-recoverable? Why?

=>  In this situation, if user choose the another index (through UI), it is the recoverable exception?
  • 第四个异常:调用null对象( NullPointerException

对象X = null,裁判员为X(例如,函数Y调用X,......)

=>  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?
  • 第五个例外:将无效字符串转换为数字( NumberFormatException

字符串X至少包含非数字字符,将X转换为数字

=>  This situation is recoverable or un-recoverable? Why?

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

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

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

更改X =“123” - &gt;整数Y(可能),此操作不需要修复代码(???)

示例:

Source code example

Results example

主要是第五种情况,我不知道为什么它是运行时异常而程序员无法对源代码做任何事情(重写代码)&lt;&lt;&lt;&lt;

0 个答案:

没有答案