Javaリフレクションメカニズムは、Java言語の重要な特徴です。Javaリフレクションを学習する前に、我々は最初の二つの概念、コンパイルして実行を理解する必要があります。
これは、実行可能なコンピュータ・ファイルを処理するためにコンパイラにソースコードをコンパイルすることを指します。これは、JavaのクラスファイルにコンパイルJavaコードのプロセスです。コンパイルは、単にいくつかの翻訳をしました、そして、このようなエラーをチェックなどのテキスト操作、などのメモリ起動して実行中のコードが、唯一のコードを入れていません。
これは、プログラムの実行が終了するまで実行するコンピュータにコンパイルしたファイルを実行することです。メモリにディスク上のコードの実装を置くために、いわゆるランアップ。
任意のオブジェクトについて、そのメソッドとプロパティを呼び出すことが可能である;情報及び動的メソッド呼び出しオブジェクトへのこの動的アクセスJavaリフレクション機構は、任意のクラスのために、このクラスのすべてのプロパティとメソッドに知らされており、動作状態にあります機能は、Java言語の反射機構と呼ばれています。簡単に言えば、それは実行時にその情報を得ることができ、反射プログラムを指します。Javaでは、単に特定のクラスに名前を付けるために、あなたは反射によってクラスにすべての情報を得ることができます。
Javaリフレクション機構が広く、サーバーやミドルウェアのプログラムで使用されてきました。サーバー側では、顧客は多くの場合、特定のメソッドオブジェクトの動的呼び出しを要求する必要があります。また、ORMミドルウェアの実現は、Javaリフレクションの使用は任意の、またはプロパティの割り当てへのJavaBeanのすべての属性を読み取ることができます。
Javaリフレクション機構は、主java.lang.reflectのパッケージ内に配置され、以下の機能を提供します。
在运行时判断任意一个对象所属的类。
在运行时构造任意一个类的对象。
在运行时判断任意一个类所具有的成员变量和方法。
在运行时调用任意一个对象的方法。
生成动态代理。
クラスのプロパティとメソッドを知るために、あなたは最初のバイトコードファイルオブジェクトクラスを取得する必要があります。ときに情報へのアクセスなどは、クラス、クラスにメソッドを使用しています。だから、最初の各オブジェクトタイプのクラスファイルのバイトコード(.classファイル)に対応する取得しました。
我々はすべて知っているように、すべてのJavaクラスは、タイプクラスの同じオブジェクトを返すObjectクラス、中のgetClass()メソッドを定義するオブジェクトクラスを継承します。例えば、サンプルコード次
Class labelCls = label1.getClass(); // label1为 JLabel 类的对象
labelClsクラスlabelClsオブジェクト記述情報、およびベースクラスオブジェクトJLabelのクラスの情報にアクセスすることができるオブジェクトのクラスを使用して。
一般的な情報にアクセス可能反映
(れるGetFieldsを呼び出して、上記のように)とgetMethods()メソッドは、次にメンバ変数とメソッドにスーパークラスから継承を含む場合、順次フィールドおよび変数公的機関のために取得されます。getDeclareFieldsスルー()とgetDeclareMethod()は、このクラスで定義された唯一のメンバー変数とメソッドを取得します。
Javaリフレクション機構の長所と短所
利点:
動的アクセスは、システムのクラス、大幅に改善された柔軟性とスケーラビリティのランタイムインスタンスとすることができます。
Javaの動的コンパイラと組み合わせることで、非常に強力な達成することができます。
この最初の実行のためのJava言語コンパイラ、およびオブジェクト指向より簡単に、簡単にソースコード内のコンポーネント間のリンクを必要とせずに、実行時に組み立てることができる柔軟なコードを作成することを可能にします。
短所:
反射は、あなたが動的にオブジェクトを作成する必要はありませんので、もし、あなたが必要としない反射をいくつかのシステムリソースを消費します。
反射は、メソッドの権限チェックを呼び出すときに、プライベートメソッドとこのクラスのプロパティへのアクセスを無視することができますので、クラスのカプセル化を弱体化し、セキュリティ上の問題につながる可能性があります。