InvocationTargetException
| 日本語 | 呼び出し対象例外 |
| 英語 | invocation target exception |
| ふりがな | いんぼけーしょんたーげっとえくせぷしょん |
| フリガナ | インボケーションターゲットエクセプション |
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.reflect.InvocationTargetException。
例外の一種。
Methodクラスのinvoke()メソッドが投げる例外。
リフレクション時に投げられる例外。
Methodクラスのinvoke()メソッドで、他のクラスのメソッドを呼び出し、その呼び出したメソッドが例外を投げた際に投げられる例外。
invoke()メソッドは、対象のメソッドが投げた例外を拾い、InvocationTargetExceptionクラスのコンストラクタに渡して、このInvocationTargetExceptionクラスを投げ直す。
つまりInvocationTargetExceptionクラスが本当の例外の「ラッパー」となる。
これは、invoke()メソッドは「あらゆるメソッド」を呼び出す必要があり、その全てのthrows指定に対応するためである。
InvocationTargetException例外にとって本当の例外は「Caused by」な例外となるため、getCause()メソッドで本当の例外を取得することができる。
例外の一種。
Methodクラスのinvoke()メソッドが投げる例外。
リフレクション時に投げられる例外。
Methodクラスのinvoke()メソッドで、他のクラスのメソッドを呼び出し、その呼び出したメソッドが例外を投げた際に投げられる例外。
invoke()メソッドは、対象のメソッドが投げた例外を拾い、InvocationTargetExceptionクラスのコンストラクタに渡して、このInvocationTargetExceptionクラスを投げ直す。
つまりInvocationTargetExceptionクラスが本当の例外の「ラッパー」となる。
これは、invoke()メソッドは「あらゆるメソッド」を呼び出す必要があり、その全てのthrows指定に対応するためである。
InvocationTargetException例外にとって本当の例外は「Caused by」な例外となるため、getCause()メソッドで本当の例外を取得することができる。
// Sample.java
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class Sample
{
public static void main( String[] args )
{
String string = "あいうえお";
// string変数のClassクラスを取得します。
Class stringClass = string.getClass();
// toString()メソッドだけ取っておきます。
Method compareToMethod = null;
// Stringクラスのメソッド一覧を取得します。
Method[] methods = stringClass.getMethods();
for( int iF1 = 0; iF1 < methods.length; ++iF1 )
{
Method method = methods[iF1];
if( method.getName().equals( "compareTo" ) )
{
compareToMethod = method;
}
}
// compareTo()メソッドを呼び出します。
try
{
// compareToMethodには「toString()メソッド」が入っています。
// ここで、第1引数にnullを渡して、わざとNullPointerException例外を
// 投げさせます。
compareToMethod.invoke( string, new Object[]{ null } );
}
catch( InvocationTargetException e )
{
e.printStackTrace();
// java.lang.reflect.InvocationTargetException
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
// Caused by: java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// ... 5 more
// 本当のメソッド(StringクラスのcompareTo()メソッド)で
// 投げられた例外はgetCause()メソッドで取得できます。
Throwable throwable = e.getCause();
throwable.printStackTrace();
// java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
}
catch( IllegalAccessException e )
{
e.printStackTrace();
}
catch( IllegalArgumentException e )
{
e.printStackTrace();
}
}
}
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class Sample
{
public static void main( String[] args )
{
String string = "あいうえお";
// string変数のClassクラスを取得します。
Class stringClass = string.getClass();
// toString()メソッドだけ取っておきます。
Method compareToMethod = null;
// Stringクラスのメソッド一覧を取得します。
Method[] methods = stringClass.getMethods();
for( int iF1 = 0; iF1 < methods.length; ++iF1 )
{
Method method = methods[iF1];
if( method.getName().equals( "compareTo" ) )
{
compareToMethod = method;
}
}
// compareTo()メソッドを呼び出します。
try
{
// compareToMethodには「toString()メソッド」が入っています。
// ここで、第1引数にnullを渡して、わざとNullPointerException例外を
// 投げさせます。
compareToMethod.invoke( string, new Object[]{ null } );
}
catch( InvocationTargetException e )
{
e.printStackTrace();
// java.lang.reflect.InvocationTargetException
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
// Caused by: java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// ... 5 more
// 本当のメソッド(StringクラスのcompareTo()メソッド)で
// 投げられた例外はgetCause()メソッドで取得できます。
Throwable throwable = e.getCause();
throwable.printStackTrace();
// java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
}
catch( IllegalAccessException e )
{
e.printStackTrace();
}
catch( IllegalArgumentException e )
{
e.printStackTrace();
}
}
}
// Sample.java
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class Sample
{
public static void main( String[] args )
{
String string = "あいうえお";
// string変数のClassクラスを取得します。
Class stringClass = string.getClass();
// toString()メソッドだけ取っておきます。
Method compareToMethod = null;
// Stringクラスのメソッド一覧を取得します。
Method[] methods = stringClass.getMethods();
for( int iF1 = 0; iF1 < methods.length; ++iF1 )
{
Method method = methods[iF1];
if( method.getName().equals( "compareTo" ) )
{
compareToMethod = method;
}
}
// compareTo()メソッドを呼び出します。
try
{
// compareToMethodには「toString()メソッド」が入っています。
// ここで、第1引数にnullを渡して、わざとNullPointerException例外を
// 投げさせます。
compareToMethod.invoke( string, new Object[]{ null } );
}
catch( InvocationTargetException e )
{
e.printStackTrace();
// java.lang.reflect.InvocationTargetException
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
// Caused by: java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// ... 5 more
// 本当のメソッド(StringクラスのcompareTo()メソッド)で
// 投げられた例外はgetCause()メソッドで取得できます。
Throwable throwable = e.getCause();
throwable.printStackTrace();
// java.lang.NullPointerException
// at java.lang.String.compareTo(String.java:728)
// at java.lang.String.compareTo(String.java:777)
// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
// at java.lang.reflect.Method.invoke(Method.java:324)
// at Sample.main(Sample.java:32)
}
catch( IllegalAccessException e )
{
e.printStackTrace();
}
catch( IllegalArgumentException e )
{
e.printStackTrace();
}
}
}




