2016-07-09 13 views
2

例外がすべて例外を基本クラスとして持つため、Exceptionはすべての例外をキャッチするのに適しているという印象を受けました。その後、Androidアプリを開発しているうちに、一部のカスタムROMで削除された以下のメソッドを使用しました。Java - NoSuchMethodErrorが例外によってキャッチされない

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

ただし、この例外はスローされませんでした。後でExceptionの代わりにNoSuchMethodErrorを使用し、例外が検出されました。

誰かがこれがなぜ起こっているのか説明できますか?

答えて

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 [OK]を読んですることをお勧めします...私はNoSuchMethodErrorが例外を延長したことを想定。グラフィックのための親指。ありがとうございました。 – Anonymous

関連する問題