为什么我不能只捕获Java

时间:2019-11-04 21:57:54

标签: java exception

众所周知,通常不应捕获运行时异常, 例如NullPointer。

但是如果我有一个捕获通用类的catch块-异常(我不推荐,我不推荐),它将捕获已检查和未检查的异常。

我不明白的是: 通过编写以下内容,您只能捕获运行时例外: catch(RuntimeException ex)  不仅检查了冒号,为什么? (我的意思是,这背后的逻辑是什么?)

为什么在Java中没有一个称为Checked Exception的类可以派生所有检查的专有名词(就像RuntimeExcpetion一样),所以我只能捕获那些异常?

1 个答案:

答案 0 :(得分:2)

您总是可以抛出RuntimeExceptions:

try {
  //code that throws
} catch (Exception e) {
  if (e instanceof RuntimeException) throw (RuntimeException) e;
  //handle checked exceptions here
}

但是我没有想到可能需要这种情况。

捕获这样的所有异常通常是在代码的最高级别完成的,这样意外的异常(a)不会使您的应用崩溃,并且(b)可以得到处理(例如,向用户显示消息或记录某些内容) )。在这种情况下,您可能想捕获所有已检查和未检查的异常。