この記事では、Java リフレクションとは何ですか? Java リフレクション メカニズムの詳細な紹介は、参考になると思います。
1. 概念
Java リフレクション (Reflection) とは、Java プログラムの実行中に、名前だけがわかっているクラスをロードし、そのクラスの完全な構築メソッドを取得できることを意味します。オブジェクトをインスタンス化して、オブジェクトのプロパティに値を設定するか、オブジェクトのメソッドを呼び出します。この動的にクラス情報を取得し、実行時にオブジェクトのメソッドを動的に呼び出す機能をJavaのリフレクション機構と呼びます。
2. クラス クラス
Class クラスは Object クラスを継承し、クラスまたはインターフェイスの実行時情報をカプセル化して呼び出して取得できます。 Class クラスのメソッド。この Class クラスを理解するにはどうすればよいでしょうか?通常のクラスがすべてのオブジェクトのメソッドと属性のコレクションである場合、この Class クラスはすべての通常のクラスのコレクションとして理解できます。
Class クラスを取得するいくつかの方法は次のとおりです:
public class TestClass { public static void main(String[] args) throws ClassNotFoundException { // 1、 Class.forName(); Class<?> aClass0 = Class.forName("java.lang.Object"); // 2、类名.Class Class<Integer> aClass1 = Integer.class; // 3、包装类.TYPE —— 返回基本类型的 Class 引用,基本类型在虚拟机运行时就已经加载了它的Class Class<Integer> aClass2 = Integer.TYPE; // 4、对象名.getClass() String str = "Hello, World"; Class<? extends String> aClass3 = str.getClass(); // 5、Class类.getSuperClass() —— 获得父类的 Class 对象 Class<?> aClass4 = aClass3.getSuperclass(); System.out.println(aClass0.getName()); System.out.println(aClass1.getName()); System.out.println(aClass2.getName()); System.out.println(aClass3.getName()); System.out.println(aClass4.getName()); } }
3. クラス情報の取得
Java のリフレクション メカニズムをテストするために、新しいペアを作成しました。親クラスと子クラスの 4 つのカプセル化プロパティをカバーし、可能な限り複数の種類の情報の取得をテストします。
Vehicle.java
vpublic class Vehicle { private String color; protected Integer seat; int year; public Date createdOn; private String getColor() { return color; } protected Integer getSeat() { return seat; } int getYear() { return year; } public Date getCreatedOn() { return createdOn; } }
Car.java
public class Car extends Vehicle { private String brand; protected Integer a; int b; public Date updatedOn; public Car(){} private Car(String brand, Integer a, int b, Date updatedOn) { this.brand = brand; this.a = a; this.b = b; this.updatedOn = updatedOn; } private String getBrand() { return brand; } protected Integer getA() { return a; } int getB() { return b; } public Date getUpdatedOn() { return updatedOn; } }
1. メソッドの取得
クラス クラスは、主に次の 2 つの方法でメソッドを取得します。
Method[] getMethods() は、アクセス可能なすべてのパブリック メソッドを返します。クラスまたはインターフェイス (継承されたパブリック メソッドを含む)。
Method[] getDeclaredMethods() このクラスまたはインターフェイスのすべてのメソッドを返します(継承されたメソッドを除く)。
public class TestMethod { public static void main(String[] args) { Class<Car> carClass = Car.class; Method[] methods = carClass.getMethods(); Method[] declaredMethods = carClass.getDeclaredMethods(); for (Method method : methods) { //for (Method method : declaredMethods) { System.out.println("方法名:" + method.getName()); System.out.println("该方法所在的类或接口:" + method.getDeclaringClass()); System.out.println("该方法的参数列表:" + method.getParameterTypes()); System.out.println("该方法的异常列表:" + method.getExceptionTypes()); System.out.println("该方法的返回值类型:" + method.getReturnType()); } } }
2. 属性の取得
クラス クラスは主に次の 2 つのメソッドで属性を取得します。
Field[] getFields(): storage すべてアクセス可能このクラスまたはインターフェイスのパブリック プロパティ (継承されたパブリック プロパティを含む)。
Field[] getDeclaredFields(): クラスまたはインターフェイスのすべてのプロパティ (継承されたプロパティを除く) を格納します。
public class TestField { public static void main(String[] args) { Class<Car> carClass = Car.class; Field[] fields = carClass.getFields(); Field[] declaredFields = carClass.getDeclaredFields(); //for (Field field : fields) { for (Field field : declaredFields) { System.out.println("属性名称是:" + field.getName()); System.out.println("该属性所在的类或接口是:" + field.getDeclaringClass()); System.out.println("该属性的类型是:" + field.getType()); // field.getModifiers() 以整数形式返回由此 Field 对象表示的属性的 Java 访问权限修饰符 System.out.println("该属性的修饰符是:" + Modifier.toString(field.getModifiers())); } } }
3. コンストラクターの取得
Class クラスは主に次の 2 つの方法でコンストラクター メソッドを取得します。 ] getConstructors(): クラスまたはインターフェイスのすべてのパブリック コンストラクターを返します。
Constructor>[] getDeclaredConstructors(): クラスまたはインターフェイスのすべてのコンストラクターを返します。
public class TestConstructor { public static void main(String[] args) throws NoSuchMethodException { Class<Car> carClass = Car.class; Constructor<?>[] constructors = carClass.getConstructors(); Constructor<?>[] declaredConstructors = carClass.getDeclaredConstructors(); Constructor<Car> carConstructor = carClass.getDeclaredConstructor(String.class, Integer.class, Integer.TYPE, Date.class); //for (Constructor constructor : declaredConstructors) { for (Constructor constructor : constructors) { System.out.println("该构造器的名称是:" + constructor.getName()); System.out.println("该构造器所在的类或接口是:" + constructor.getDeclaringClass()); //返回构造方法的参数类型 constructor.getParameterTypes(); } } }
four 、動的呼び出し
これまで、Class クラスのメソッドを通じて、対応するクラスの属性、メソッド、コンストラクターの詳細情報を取得しました。次に、この情報を使用してオブジェクトを動的に作成し、プロパティを変更し、メソッドを動的に呼び出します。
rree以上がJava リフレクションとは何ですか? Java リフレクション メカニズムの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ドリームウィーバー CS6
ビジュアル Web 開発ツール
