我的印象是,Exception有助于捕获所有可能的异常,因为每个异常都将Exception作为基类。然后在开发Android应用程序时,我使用了以下方法,这些方法在一些自定义ROM中已被删除。
boolean result = false;
try{
result = Settings.canDrawOverlays(context);
}
catch(Exception e){
Log.e("error","error");
}
然而,这并没有引发异常抛出。之后我使用了NoSuchMethodError
而不是Exception
,然后发现了异常。
有人可以解释为什么会这样吗?
答案 0 :(得分:8)
Java异常层次结构如下所示:
Throwable
| |
Error Exception
|
RuntimeException
错误用于发出有关JVM内部问题和其他异常情况的信号,这些情况通常无法以合理的方式处理。所以,在你的代码中,你没有抓住它们。请尝试捕捉Throwable
:
boolean result = false;
try{
result = Settings.canDrawOverlays(context);
}
catch(Throwable e){
Log.e("error","error");
}
阅读this
也是个好主意