反射とは何ですか
反射機構が動作状態で、任意のクラスのために、このクラスのすべてのプロパティとメソッドに知られて作られています。
任意のオブジェクトのために、私たちはそのメソッドとプロパティのいずれかを呼び出すことができます。
この関数の方法及び動的情報は、Java言語の動的取得として知られているオブジェクトの反射機構を呼び出します。
人気話すには、反射によって、クラスには、何もすることができ取得したい、私たちに対して完全に透過的です。
どのような反射を行います
主反射機構は、次の機能を提供します。
- ランタイムオブジェクトで決定することは、どのクラスに属します。
- 任意の構成内のオブジェクトのランタイムクラスでは、
- いずれかのクラスは、実行時にメンバ変数やメソッドを持って分析します。
- 実行時にオブジェクトのメソッドのいずれかを呼び出します。
- 動的プロキシを生成します。
反射の使用
リフレクションを使用したい、我々が最初に取得する必要がありますクラスのバイトコードファイルオブジェクト(.classファイル)、我々がバイトコードファイルオブジェクトを好きな方法で(すべての情報をこのような方法を介して取得することが可能です等、プロパティ、クラス名、親クラスの名前、実装されたすべてのインターフェイス)、各クラスのバイトコードファイルに対応するには、クラスのオブジェクトタイプ、すなわちに対応するバイトコードファイルオブジェクト。
3通りの方法でバイトコードファイルオブジェクトを取得します。
1、クラスclazz1 = Class.forNameの( "完全修飾クラス名"); // 静的メソッドにforName Classクラス、直接バイトコード・ファイル・オブジェクト・クラスに、そのクラスのソース・ファイル、または段階、及びバイトコードファイルへの変更はありません。 。2、クラスclazz2 =のPerson クラス ; // クラスは、.classファイルにロードされたときに、.classファイルPersonクラスにこの時、バイトコードファイルオブジェクトを取得するには、すなわち、そのようなバイトに、独自の取得コード位相。 。3、クラスclazz3のp.getClass =(); // インスタンスのクラスのバイトコードファイルのクラスオブジェクトを取得することにより、ステージで作成されたクラスオブジェクト
GetDeclaredFields差分れるGetFields
- フィールドgetDeclaredFieldsは、()はすべて、官民およびproteced含まクラスを宣言取得しますが、親クラスの述べたフィールドが含まれていません。
- れるGetFields()親クラスを含むクラスのパブリック(公共)フィールドのすべてを取得します。