アノテーションとリフレクション 03 -- クラス オブジェクト

クラスクラス

次のメソッドは Object クラスで再定義され、すべてのサブクラスに継承されます。

public final Class getClass()

上記メソッドの戻り値の型は Java リフレクションの元となる Class クラスですが、実はプログラムの実行結果、つまり名前からもいわゆるリフレクションがよく分かります。クラスはオブジェクトのリフレクションを通じて取得できます。
ここに画像の説明を挿入

ミラーを参照した後にオブジェクトが取得できる情報: 特定のクラスのプロパティ、メソッド、コンストラクター、および特定のクラスが実装するインターフェイス。各クラスについて、JRE は特に不変の Class 属性を予約します。Class オブジェクトには、特定の構造に関する情報が含まれています。
(1) クラス自体もクラスです
(2) クラス オブジェクトは、システムによって作成されたオブジェクトのみを持つことができます
(3) ロードされたクラスは、JVM 内に 1 つの Class インスタンスのみを持ちます
(4) Class オブジェクトは、JVM にロードされたクラスに対応しますJVM .class ファイル
(5) 各クラス インスタンスは、そのクラス インスタンスによって生成されたことを記憶します
(6) クラスを通じて、クラス内に読み込まれたすべての構造を完全に取得できます
(7) クラス クラスは、あらゆるクラスの Reflection のルートです。動的にロードして実行するクラス。在庫のある対応する Class オブジェクトのみ

Classクラスの共通メソッド

メソッド名 機能の説明
static ClassforName(文字列名) 指定されたクラス名 name の Class オブジェクトを返します。
オブジェクト newInstance() デフォルトのコンストラクターを呼び出して、Class オブジェクトのインスタンスを返します。
getName() この Class オブジェクトによって表されるエンティティ (クラス、インターフェイス、配列クラス、または void) の名前を返します。
クラスgetSuperClass() 現在の Class オブジェクトの親クラスの Class オブジェクトを返します。
クラス[] getinterfaces() 現在の Class オブジェクトのインターフェイスを返します。
クラスローダー getClassLoader() このクラスのクラスローダーを返します。
ClassLoader[] getConstructors() いくつかの Constructor オブジェクトを含む配列を返します。
メソッド getMethod(文字列名,クラス… T) パラメーターの型が paramType である Method オブジェクトを返します。
フィールド[] getDeclaredFields() Field オブジェクトの配列を返します。

Class クラスのインスタンスを取得する

(1) 特定のクラスは、クラスの class 属性を通じて既知であり、取得されるため、この方法が最も安全で信頼性が高くなります。

Class c1 = Person.class

(2) あるクラスのインスタンスに対して、そのインスタンスのgetClass()メソッドを呼び出し、Classオブジェクトを取得します。

Class c1 = person.getClass();

(3) クラスの完全なクラス名がわかっており、そのクラスがクラス クラスの静的メソッド forName() を通じて取得できるクラス パス内にあり、ClassNotFoundException がスローされる場合があります。

Class c1 = Class.forName("demo.Student");

どの型が Class オブジェクトを持つことができるか

(1) クラス: 外部クラス、メンバー (メンバー内部クラス、静的内部クラス)、ローカル内部クラス、匿名内部クラス (
2) 推論: インターフェース
(3) []: 配列 (4
) enum: 列挙
(5) 注釈 :アノテーション @interfance
(6) プリミティブ型: 基本データ型
(7) void

おすすめ

転載: blog.csdn.net/cang_ling/article/details/131965177