众所周知,通常不应捕获运行时异常, 例如NullPointer。
但是如果我有一个捕获通用类的catch块-异常(我不推荐,我不推荐),它将捕获已检查和未检查的异常。
我不明白的是:
通过编写以下内容,您只能捕获运行时例外:
catch(RuntimeException ex)
不仅检查了冒号,为什么?
(我的意思是,这背后的逻辑是什么?)
为什么在Java中没有一个称为Checked Exception的类可以派生所有检查的专有名词(就像RuntimeExcpetion一样),所以我只能捕获那些异常?
答案 0 :(得分:2)
您总是可以抛出RuntimeExceptions:
try {
//code that throws
} catch (Exception e) {
if (e instanceof RuntimeException) throw (RuntimeException) e;
//handle checked exceptions here
}
但是我没有想到可能需要这种情况。
捕获这样的所有异常通常是在代码的最高级别完成的,这样意外的异常(a)不会使您的应用崩溃,并且(b)可以得到处理(例如,向用户显示消息或记录某些内容) )。在这种情况下,您可能想捕获所有已检查和未检查的异常。