Java - NoSuchMethodError 未被异常捕获

Java - NoSuchMethodError not caught by Exception

我的印象是 Exception 非常适合捕获所有可能的异常,因为它们中的每一个都以 Exception 作为基础 class。然后在开发 Android 应用程序时,我使用了以下方法,该方法在某些自定义 ROM 中已被删除。

boolean result = false;
try{
   result =  Settings.canDrawOverlays(context);
}
catch(Exception e){
    Log.e("error","error");
}

然而这并没有捕捉到抛出的异常。后来我用NoSuchMethodError代替了Exception然后异常就被捕获了

有人可以解释为什么会这样吗?

Java 异常层次结构如下所示:

Throwable
 |      |
Error   Exception
        |
        RuntimeException

错误旨在发出有关 JVM 内部问题和其他程序通常无法处理的异常情况的信号。因此,在您的代码中您没有捕捉到它们。尝试捕获 Throwable 而不是:

boolean result = false;
try{
   result =  Settings.canDrawOverlays(context);
}
catch(Throwable e){
    Log.e("error","error");
}

阅读this

也是个好主意