三つの要素:何であるか、メリットが何であるか、どのように使用します。
どのような反射が何かをやっています
Javaで反射機構手段動作状態で任意のクラスは、このクラスのすべてのプロパティおよびメソッドを知ることができるため、;及び方法のいずれかを呼び出すことができる任意のオブジェクトについて、そのような情報への動的アクセスおよび動的Java言語の反射になる機能オブジェクトのメソッドを呼び出します。
メリットは何ですか
なぜそれが反映されていますか?
コンパイル時のタイプをし、実行時の型を:実際には、反射は2つのタイプが表示されます実行されるJavaプログラムでは、独自のシナリオでは、多くのオブジェクトがあります。コンパイル時の型は、実際の割り当てのタイプを決定するために、実用的な宣言されたオブジェクトのタイプ、オブジェクトの実行時の型によって決定されます。
実行時にプログラムはまた、入ってくる外部オブジェクトを受け取ることができるオブジェクトのコンパイル時に型がオブジェクトですが、アプローチのオブジェクトの型を呼び出す必要があるとき、プログラムが実行されました。これらの問題を解決するために、プログラムが実行時に実際の情報オブジェクトとクラスを見つける必要があります。しかし、クラスはオブジェクトとクラスをコンパイルするのに属するものを予測することができない場合、プロセスは唯一のオブジェクトとクラスについての本当の情報を発見するために、実行時の情報に頼ることができ、反射を使用する必要があり、その場合には。
使い方
JavaリフレクションAPI
- 1.クラスクラス:コアクラスを反映し、そのようなプロパティ、メソッド、等の情報を取得することができます。
- 2.フィールドカテゴリ:メンバ変数のクラスのパッケージ内Java.lang.reflecクラスは、クラス間の属性値および設定を取得するために使用することができます。
- 3.メソッドのカテゴリ:パッケージ内Java.lang.reflecクラスは、クラス情報またはメソッドクラスを行う方法を得るために使用することができる方法を表します。
- 4.コンストラクタカテゴリ:Java.lang.reflecパッケージのクラス、クラスのコンストラクタを表し
ステップの反射(オブジェクトのメソッドを呼び出す、Classオブジェクトを取得します)
- 1.操作したいクラスのオブジェクトクラスを取得し、彼はクラスのオブジェクトを介して私たちはクラスのメソッドを呼び出すことができ、コアの反映です。
- 2.だけでなく、クラスのクラス内のメソッドを呼び出し反射の使用段階です。
- 3.リフレクションAPIは、情報を操作します。
3つの方法のClassオブジェクトを取得します。
- オブジェクトのgetClass()メソッドを呼び出します
人物P =新しい人();
クラスclazz = p.getClass()。
- クラスに対応するClassオブジェクトを取得するには、クラスのクラス属性を呼び出します
クラスclazz = Person.class。
- 静的メソッドにforName Classクラス()(最も安全/最高のパフォーマンス)
クラスclazz = Class.forNameの( "フルパスタイプ");(最も一般的)
私たちは、クラスのオブジェクトクラスを取得するときは、クラスメソッドとプロパティを取得し、表示するクラスのクラスメソッドで、操作したいです。
//获取 Person 类的 Class 对象
Class clazz=Class.forName("reflection.Person");
13/04/2018 Page 105 of 283
//获取 Person 类的所有方法信息
Method[] method=clazz.getDeclaredMethods();
for(Method m:method){
System.out.println(m.toString());
}
//获取 Person 类的所有成员属性信息
Field[] field=clazz.getDeclaredFields();
for(Field f:field){
System.out.println(f.toString());
}
//获取 Person 类的所有构造方法信息
Constructor[] constructor=clazz.getDeclaredConstructors();
for(Constructor c:constructor){
System.out.println(c.toString());
}
オブジェクトを作成するにはいくつかの方法
- 1.直接新しいオブジェクトが、私たちのクラスの引数なしのコンストラクタの一般的な要件。
- 2.クローン()、オブジェクトクローン
- 反射によって3。ファーストクラスのオブジェクトは、コールコンストラクタオブジェクトのnewInstance()指定されたコンストラクタオブジェクトを使用して取得された
インスタンスコンストラクタを作成することができ、この方法により選択された対応するクラスのクラスのオブジェクトのインスタンスを作成する方法。
/获取 Person 类的 Class 对象
Class clazz=Class.forName("reflection.Person");
//使用.newInstane 方法创建对象
Person p=(Person) clazz.newInstance();
//获取构造方法并创建对象
Constructor c=clazz.getDeclaredConstructor(String.class,String.class,int.class);
//创建对象并设置属性
13/04/2018 Page 106 of 283
Person p1=(Person) c.newInstance("李四","男",20);