コールJavaは、指定した属性をday43-反射機構指定の方法を学びます

まず、反射が指定したメソッドを呼び出します

  反射によって、クラスのメソッドを呼び出し、メソッドクラスによって完成されます。ステップ:

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

結果を印刷します:

 

おすすめ

転載: www.cnblogs.com/su-peng/p/12625356.html
おすすめ