ホームページ  >  記事  >  Java  >  Javaのリフレクション機構とは何ですか

Javaのリフレクション機構とは何ですか

(*-*)浩
(*-*)浩オリジナル
2019-11-11 10:37:265466ブラウズ

Java リフレクション メカニズムでは、実行状態では、どのクラスについても、このクラスのすべてのプロパティとメソッドを取得でき、また、どのオブジェクトについても、そのプロパティおよびメソッドを呼び出すことができます。

Javaのリフレクション機構とは何ですか

#この動的に情報を取得し、実行時にオブジェクトのメソッドを動的に呼び出す機能を Java リフレクション機構と呼びます。 (推奨学習: Java コース )

クラス クラスは、java.lang.reflet クラス ライブラリを使用したリフレクションの概念を java.lang.reflet クラス ライブラリでサポートします。 (各クラスは Member インターフェイスを実装します)。これらのタイプのオブジェクトは、実行時に JVM によって作成され、未知のクラスの対応するメンバーを表します。

つまり、Constructor を使用して新しいオブジェクトを作成し、get() メソッドと set() メソッドを使用して Field オブジェクトに関連付けられたフィールドを読み取りおよび変更し、invoke() メソッドを使用して Method オブジェクトに関連付けられたメソッドを呼び出すことができます。 。

さらに、getFields() getMethods() や getConstructors() などの便利なメソッドを呼び出して、フィールド、メソッド、コンストラクターを表すオブジェクトの配列を返すこともできます。このようにして、コンパイル時には何も知ることなく、匿名オブジェクトに関する情報を実行時に完全に決定できます。

リフレクション メカニズムを通じてクラス情報を取得する

リフレクション メカニズムを通じてオブジェクトを作成する オブジェクトを作成する前に、オブジェクトのコンストラクター オブジェクトを取得し、コンストラクター オブジェクトを介して、対応するクラスを呼び出します。

次のコードは、実行時に参加とパラメータを持たないオブジェクト インスタンスを作成します。 getConstructor() メソッドと newInstance() メソッドは多くの例外をスローするため (ソース コードを通じて確認できます)、ここでは直接例外をスローすることを省略しています。以下同様です。

package com.jas.reflect;

import java.lang.reflect.Constructor;

public class ReflectTest {
    public static void main(String[] args) throws Exception {

        Class clazz = null;
        clazz = Class.forName("com.jas.reflect.Fruit");
        Constructor<Fruit> constructor1 = clazz.getConstructor();
        Constructor<Fruit> constructor2 = clazz.getConstructor(String.class);

        Fruit fruit1 = constructor1.newInstance();
        Fruit fruit2 = constructor2.newInstance("Apple");

    }
}

class Fruit{
    public Fruit(){
        System.out.println("无参构造器 Run...........");
    }
    public Fruit(String type){
        System.out.println("有参构造器 Run..........." + type);
    }

}

出力:

无参构造器 Run...........
有参构造器 Run...........Appl

以上がJavaのリフレクション機構とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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