Javaリフレクションの基本的な理解

1.リフレクションとは何ですか?

私はインターネットでの反省について非常に人気のある説明を覚えています:

Javaは大きな美しさですが、大きな女性には許されないことがたくさんあります。反射神経とは、銃を手に持って銃を構えることです。大きな美しさでやりたいことは何でもできます。オフ。

通常の説明:Javaのリフレクションは、プログラムが実行時にオブジェクトのすべての情報を取得できることを意味します。これは、オブジェクト情報を動的に取得し、オブジェクトを動的に呼び出す方法です。最も一般的なシナリオは、動的プロキシです。最も広く使用されている動的プロキシは、Springなどのさまざまなフレームワークです。

2.リフレクションの内容と適用

2.1クラスオブジェクト

リフレクションは、Classオブジェクトから分離できない必要があります。コードを記述した後、.classファイルにコンパイルする必要があることは誰もが知っています。ここでの各.classファイルは、仮想マシンによってメモリにロードされた後、Classオブジェクトとして存在します。クラスは1つの.classファイルしか持つことができません。したがって、クラスはClassオブジェクトに対応し、Classオブジェクトはの記述情報です。クラス。例:フィールド、メソッド、注釈など。クラス構造を取得する限り、彼はClassオブジェクトに反映され、Classオブジェクトを介して取得できます。

总结:class(include )interfaceの本質はデータ型( Type)です

Stringクラスを例にとると、JVMはStringクラスをロードするときに、最初String.classにファイルをメモリに読み込み、次にクラスのインスタンスをString作成して関連付けます。Class

Class cls = new Class(String);

JVMは、ロードされたインスタンスごとclassに対応するインスタンスを作成し、クラス名、パッケージ名、親クラス、実装されたインターフェイス、すべてのメソッド、フィールドなどを含むすべての情報をClassインスタンスに保存classするため、特定のインスタンス、このインスタンスを介してインスタンスに対応するすべての情報を取得Classできます。Classclass

Classインスタンスを介して情報を取得するこの方法はclass、リフレクションと呼ばれます。

class1つのインスタンスを取得する方法はClass3つの方法があります:

(1)

class静的変数を介して直接取得しますclass

Class cls = String.class;

(2)

getClass()インスタンス変数がある場合は、インスタンス変数によって提供されるメソッドを介して取得できます。

String s = "Hello";
Class cls = s.getClass();

(3)

1つの完全なクラス名がわかっている場合はclass、静的メソッドを使用して取得できますClass.forName()

Class cls = Class.forName("java.lang.String");

具体的な理解:クラス-LiaoXuefengの公式ウェブサイト

2.2プロキシ

動的プロキシは、実際には、JVMが実行時にクラスバイトコードを動的に作成してロードするプロセスです。

その後の追加...

おすすめ

転載: blog.csdn.net/qq_35207086/article/details/123228659