logo

呼び出しターゲット例外

呼び出しターゲット例外 呼び出されたメソッドまたはコンストラクターによってスローされた例外を保持するチェック例外です。 JDK 1.4 以降、この例外は汎用の例外チェーン メカニズムに準拠するように改良されました。構築時に提供され、 getTargetException() メソッドを介してアクセスされる「ターゲット例外」は現在、原因として認識されており、「レガシー メソッド」だけでなく Throwable.getCause() メソッドを介してアクセスできる可能性があります。

簡単に言うと、Method.invoke() を使用してクラスを呼び出すと、例外がスローされます。で包まれています java.lang.reflect.InvocationTargetException クラス。

InvocationTargetExceptionの原因

InvokationTargetException は主に、 ジャワ リフレクション API を使用して、基礎となる例外自体をスローするリフレクション層内のメソッドまたはコンストラクターの呼び出しを試みます。

リフレクション層は、デフォルトのメソッドによってスローされる実際の例外を保持します。

ソフトウェアのテストと種類

java.lang.reflect.InvocationTargetException を解決する方法

InvocationTargetException は、呼び出されたメソッドによって発生し、例外がスローされます。基礎となる例外は、getCause() メソッドを使用して見つけることができます。したがって、InvocationTargetException を解決するには、実際の例外を見つけて解決する必要があります。

呼び出しターゲット例外

以下の例を考えてみましょう。これは、Method.invoke() を使用して呼び出されるメソッド Demo() で例外 (ゼロ除算) を意図的に生成します。したがって、出力では AirthmeticException (DividebyZero) と InvokationTargetException の両方がスローされます。

TestInvocationException.java:

 import java.lang.reflect.Method; public class TestInvocationException { public static void main(String[] args) { TargetInvocation ti = new TargetInvocation(); // Accessing all the methods of TargetInvocationClass: Method[] m = TargetInvocation.class.getMethods(); try { // Invoking the first method of the TargetInvocatioClass: m[0].invoke(ti); } catch(Exception e) { // Printing the wrapper exception: System.out.println('Wrapper exception: ' + e); // Printing the 'actual' exception: System.out.println('Underlying exception: ' + e.getCause()); } } } class TargetInvocation{ public void Demo() { // Dividing by zero to intentionally throw an exception: System.out.println(10 / 0); } } 

出力:

 Wrapper exception: java.lang.reflect.InvocationTargetException Underlying exception: java.lang.ArithmeticException: / by zero