目次
1. 概念
2. クラス クラス
3. クラス情報の取得
これまで、Class クラスのメソッドを通じて、対応するクラスの属性、メソッド、コンストラクターの詳細情報を取得しました。次に、この情報を使用してオブジェクトを動的に作成し、プロパティを変更し、メソッドを動的に呼び出します。
ホームページ Java &#&チュートリアル Java リフレクションとは何ですか? Java リフレクション メカニズムの詳細な紹介

Java リフレクションとは何ですか? Java リフレクション メカニズムの詳細な紹介

Sep 19, 2018 pm 02:30 PM
Java リフレクション

この記事では、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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Java リフレクションを使用したリバース エンジニアリング: ソフトウェアの内部動作を解明する Java リフレクションを使用したリバース エンジニアリング: ソフトウェアの内部動作を解明する Feb 19, 2024 pm 11:20 PM

Java リフレクションは、クラスのプライベート フィールドやメソッドにアクセスできるようにする強力なツールであり、それによってソフトウェアの内部動作を明らかにします。これは、リバース エンジニアリング、ソフトウェア分析、デバッグなどの分野で役立ちます。 Java リフレクションを使用するには、まず java.lang.reflect パッケージをインポートする必要があります。次に、 Class.forName() メソッドを使用して、クラスの Class オブジェクトを取得できます。 Class オブジェクトを取得すると、さまざまなメソッドを使用してクラスのフィールドやメソッドにアクセスできます。たとえば、getDeclaredFields() メソッドを使用すると、プライベート フィールドを含むクラスのすべてのフィールドを取得できます。 getDeclaredMethods() メソッドを使用することもできます。

Javaリフレクションで属性の値を取得する方法 Javaリフレクションで属性の値を取得する方法 Jan 03, 2024 pm 03:05 PM

取得方法: 1. サンプル オブジェクトを作成します; 2. field.get(person) を通じてフィールドの値を取得します (person はサンプル オブジェクト、field はフィールドを表す Field オブジェクトです); 3. setAccessible を通じてフィールドを設定します(true) アクセス可能な状態では、プライベート フィールドでも値を取得できます; 4. フィールド配列を走査し、各フィールドの名前と対応する値を取得し、出力します。

Java のリフレクション メカニズムの原理は何ですか? Java のリフレクション メカニズムの原理は何ですか? Jun 21, 2023 am 10:53 AM

Java リフレクション メカニズムの原理は、バイトコード ファイルがメモリにロードされると、jvm がバイトコードを分析し、そのオブジェクトの Class オブジェクトを作成することです。jvm は、すべてのバイトコード ファイル情報を Class オブジェクトに保存します。 Class オブジェクトを取得すると、そのオブジェクトを使用して、オブジェクトのプロパティやメソッドなどを設定できます。リフレクション機構は、実行状態にある任意のクラスの属性とメソッドをすべて把握する機能であり、任意のオブジェクトに対して、その属性とメソッドを呼び出し、動的に情報を取得し、動的にオブジェクトのメソッドを呼び出すことができます。

Java リフレクション メカニズムを使用してオブジェクトを作成するにはどうすればよいですか? Java リフレクション メカニズムを使用してオブジェクトを作成するにはどうすればよいですか? Apr 15, 2024 pm 04:18 PM

Java リフレクション メカニズムを通じてオブジェクトを作成する手順は次のとおりです。 ターゲット クラスをロードします。 Class.forName() メソッドを使用します。コンストラクターを取得します。 getDeclaredConstructor() メソッドを使用します。オブジェクトを作成します。 newInstance() メソッドを使用してパラメータを渡します。

Java リフレクション メカニズムの原理と応用についての深い理解 Java リフレクション メカニズムの原理と応用についての深い理解 Dec 23, 2023 am 09:09 AM

Java リフレクション メカニズムの原理と応用についての深い理解 1. リフレクション メカニズムの概念と原理 リフレクション メカニズムとは、動的にクラス情報を取得し、クラス メンバー (プロパティ、メソッド、コンストラクターなど) にアクセスして操作する機能を指します。プログラムが実行中です。リフレクション メカニズムを使用すると、コンパイル時にクラスの特定の情報を知らなくても、プログラムの実行中にオブジェクトを動的に作成したり、メソッドを呼び出したり、プロパティにアクセスしたりできます。リフレクション メカニズムの中核は、java.lang.reflect パッケージ内のクラスとインターフェイスです。このうち、Class クラスはクラスのバイトを表します。

Java で NoSuchFieldException はどのようなシナリオで発生しますか? Java で NoSuchFieldException はどのようなシナリオで発生しますか? Jun 25, 2023 am 11:51 AM

Java の NoSuchFieldException 例外は、リフレクション中に存在しないフィールド (Field) にアクセスしようとしたときにスローされる例外を指します。 Java では、リフレクションを使用すると、コードを通じてプログラム内のクラス、メソッド、変数などを操作できるため、プログラムがより柔軟でスケーラブルになります。ただし、リフレクションを使用する場合、アクセスされたフィールドが存在しない場合は、NoSuchFieldException がスローされます。 NoSuchFieldException

Javaリフレクションの呼び出しメソッドは何ですか Javaリフレクションの呼び出しメソッドは何ですか Dec 22, 2023 pm 05:09 PM

Java リフレクション呼び出しメソッドは次のとおりです: 1. クラス クラス; 2. コンストラクター クラス; 3. メソッド クラス; 4. フィールド クラス; 5. ClassLoader クラス。詳細な紹介: 1. クラス クラス。クラス名、メンバー変数、メソッドなどを含むクラス情報を取得するために使用されます。クラス クラスの "newInstance()" メソッドを通じてクラスのインスタンスを作成できます。 2. コンストラクター クラス、コンストラクターのパラメーターの型、修飾子、戻り値の型、その他の情報などを取得するために使用されます。

Javaリフレクションを使用してオブジェクトのプロパティと値を取得する方法 Javaリフレクションを使用してオブジェクトのプロパティと値を取得する方法 Jan 03, 2024 pm 02:43 PM

取得方法: 1. Person クラスを作成し、リフレクションを通じてクラスの Class オブジェクトを取得します; 2. getDeclaredFields メソッドを使用して、クラスのすべてのフィールドを取得します; 3. フィールド配列をトラバースして、フィールドをアクセス可能な状態に設定します。このメソッドはフィールドの値を取得し、フィールド名と値を出力します。

See all articles