2016-07-09 2 views
2

У меня создалось впечатление, что Exception хорош для обнаружения всех возможных исключений, поскольку каждый из них имеет исключение в качестве базового класса. Затем при разработке приложения для Android я использовал следующий метод, который в некоторых пользовательских ПЗУ был удален.Java - NoSuchMethodError не попал в исключение

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

Однако это не уловило исключение. Позже я использовал NoSuchMethodError вместо Exception, после чего исключение было поймано.

Может кто-нибудь объяснить, почему это происходит?

ответ

7

иерархия исключений Java выглядит так:

Throwable 
|  | 
Error Exception 
     | 
     RuntimeException 

Ошибки предназначены для сигнализации относительно проблем в JVM внутренних органов и других аномальных условий, которые, как правило, не могут быть обработаны с помощью программы то в здравом образом. Итак, в вашем коде вы их не поймаете. Попробуйте поймать Throwable вместо:

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

Кроме того, это хорошая идея, чтобы читать this

+0

aaaw нормально ... Я предположил, что NoSuchMethodError расширялся Exception. Большие пальцы вверх для графики. Спасибо. – Anonymous

 Смежные вопросы

  • Нет связанных вопросов^_^