まず、反射が指定したメソッドを呼び出します
反射によって、クラスのメソッドを呼び出し、メソッドクラスによって完成されます。ステップ:
getMethod(文字列名、クラス...たparameterTypes)1.クラスクラスメソッドオブジェクトの方法によって達成され、必要な操作の方法のこのタイプのパラメータを設定します。
2.方法であることがオブジェクトOBJパラメータ情報を渡し、オブジェクトを呼び出し(オブジェクトobj、オブジェクト[]引数)コールを使用した後。
パッケージday19、 インポートjava.lang.reflect.Constructor; インポートをjava.lang.reflect.Fieldとして、 インポートjava.lang.reflect.Methodオブジェクト、 パブリック クラスTest1を{ 公共 静的 ボイドメイン(文字列[]引数){ 試み{ クラスclazz = Class.forNameの(「day19.Student」); / ** *注:以下の反射が呼び出しSETINFO方法にするかどうかである、または試験方法、オブジェクトOBJメソッドが呼び出され、オブジェクトが実際に学生OBJオブジェクトである * * / コンストラクタCON clazz.getConstructor =(); // 引数なしのコンストラクタを取得しない オブジェクトをOBJ = con.newInstance(); // 引数なしでコンストラクタを使用してオブジェクトを作成します // メソッドは、パブリック呼び出したい場合は メソッド、M = clazz.getMethod(「SETINFO」、文字列。クラス、文字列。クラス); // SETINFOと呼ばれる名前を取得し、パラメータは文字列の文字列の方法である m.invoke(objが、 「ジョー・スミス」、「最初の学校」); // パラメータ1には、オブジェクトをインスタンス化する必要があり、パラメータ2を呼び出すと、現在のメソッドの実際のパラメータである // メソッドあなたがプライベートコールする場合 の方法をM1 = clazz.getDeclaredMethod( 。「テスト」、文字列クラス); // テストメソッドが呼び出さ取得、String型メソッドのパラメータ m1.setAccessible(真の); // プライベートパッケージをリリース、次のメソッドは、プライベート呼び出すように強制することができ m1.invoke(OBJを、 "ジョン・ドウ" ); // オーバーロードメソッドの呼び出し メソッドM2 = clazz.getMethod( "SETINFO" 、int型。クラス); // オーバーロードはSETINFOの m2.invoke(OBJ、10); // パラメータ1は、現在の実際のパラメータの方法のパラメータ2呼び出し、オブジェクトをインスタンス化する必要があることである 。// メソッド呼び出しの戻り値 メソッドM3をclazz.getMethodは=(「getSchoolは」); // これはgetSchoolと呼ばれる方法を得るための方法およびパラメータなしで 、文字列の学校=(String)をm3.invoke(OBJ)// 呼び出しが戻っ値を、ないパラメータ法 システム.out.println(学校); } キャッチ(例外e){ // TODO自動生成されたブロックキャッチ e.printStackTrace(); } } }
結果を印刷します:
第二には、指定されたプロパティの反射機構を呼び出します
1.反射、提出クラスのクラス属性によって直接操作、SET()フィールドクラスによって提供されるget()メソッドでは、コンテンツのセットアップと操作属性を取得することができます。
2.publicフィールドのgetField(String name)指定publicクラスまたはフィールドのインターフェイス表現Classオブジェクトを返します。
指定したフィールド3.publicフィールドgetDeclaredField(文字列名)は、クラスまたはインタフェースによって表されるClassオブジェクトを返します。
フィールドに4:
指定されたオブジェクトobjのこのフィールドのプロパティの内容を取得する①publicオブジェクトGET(オブジェクトOBJ)
このセットの②publicボイド集合(オブジェクトobj.Object値)フィールドOBJ指定されたオブジェクトの属性
注:では、クラスのプロパティは、セットを使用する場合(プライベート前提の下で設定)と第1操作するために外部からアクセスできるようにフィールドクラスsetAcessible(true)メソッドのプロパティを使用して()メソッドを取得しています。
アクセス私有財産への③public無効setAccessible(真)、そうプロパティが表示されます。
パッケージday19、 インポートjava.lang.reflect.Constructor; インポートをjava.lang.reflect.Fieldとして、 インポートjava.lang.reflect.Methodオブジェクト、 パブリック クラスTest1を{ 公共 静的 ボイドメイン(文字列[]引数){ 試み{ クラスclazz = Class.forNameの( "day19.Student" ); // オブジェクトを作成する反射 コンストラクタCON = ; clazz.getConstructor() 学生STU = (学生)con.newInstance() フィールド、F = clazz.getField( "学校")。// 学校のプロパティの名前を取得 f.set(STU、 "第三中"); // の学校のプロパティの設定"第三の学校" STU対象 文字列の学校=(String)をf.get(STU); // 取得STUオブジェクトのプロパティの学校値 のSystem.out.println(学校); // それは私有財産である場合 フィールド、F1 = clazz.getDeclaredField(「privateField」); f1.setAccessible(真の); // 剥離力は、以下の私有財産のパッケージを呼び出すことができ F1を。セット(STU、 "プライベート性試験" ) のSystem.out.println(f1.get(STU)); } キャッチ(例外e){ // TODO自動生成されたブロックキャッチ e.printStackTrace(); } } }
結果を印刷します: