JavaA2Z

KAB-studio > プログラミング > JavaA2Z > InvocationTargetExceptionとは

InvocationTargetException

日本語 呼び出し対象例外
英語 invocation target exception
ふりがな いんぼけーしょんたーげっとえくせぷしょん
フリガナ インボケーションターゲットエクセプション

解説

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名java.lang.reflect.InvocationTargetException。
例外の一種。
Methodクラスのinvoke()メソッド投げる例外
 
リフレクション時に投げられる例外
Methodクラスのinvoke()メソッドで、他のクラスメソッド呼び出し、その呼び出しメソッド例外を投げた際に投げられる例外
invoke()メソッドは、対象のメソッドが投げた例外を拾い、InvocationTargetExceptionクラスコンストラクタに渡して、このInvocationTargetExceptionクラスを投げ直す。
つまりInvocationTargetExceptionクラスが本当の例外の「ラッパー」となる。
これは、invoke()メソッドは「あらゆるメソッド」を呼び出す必要があり、その全てのthrows指定に対応するためである。
 
InvocationTargetException例外にとって本当の例外は「Caused by」な例外となるため、getCause()メソッドで本当の例外を取得することができる。

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// 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();
        forint 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();
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「解説」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/12/02
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。