反射技術とは何ですか? Java で最も一般的に使用されるリフレクション テクノロジの例

php是最好的语言
リリース: 2018-08-04 13:58:39
オリジナル
1116 人が閲覧しました

リフレクションテクノロジーとは何ですか?

指定されたクラスとクラス内のコンテンツ(メンバー)を動的に取得し、そのコンテンツを実行します。アプリケーションはすでに実行されており、その中で新しいオブジェクトを作成できない場合、そのオブジェクトは使用できません。この時点で、構成ファイルの完全なクラス名に基づいて対応するバイトコード ファイルを見つけてメモリにロードし、このクラスのオブジェクト インスタンスを作成できます。これにはリフレクション テクノロジの使用が必要です。クラスでは、外部が一部のプロパティやメソッドにアクセスできないようにするために、通常はプライベートに設定されています。このとき、Java リフレクションによってもたらされる利便性を利用して、クラスにアクセスできます。クラスのプライベート プロパティ:

最も一般的に使用されるリフレクション テクノロジ

/**Person类****/package com.qiu;public class Person {
    private String name;    private static Integer age;    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public Integer getAge() {        return age;
    }    public void setAge(Integer age) {        this.age = age;
    }    @Override
    public String toString() {        return "Person [name=" + name + ", age=" + age + "]";
    }    public String toString1() {        return "Person [name=" + name + ", age=" + age + "]";
    }    public String demo(String de) {        return de;
    }
}
ログイン後にコピー
package com.qiu;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/**
 * 测试类
 * @author qiu
 *
 */public class Test {

    public static void main(String[] args) throws Exception {        //加载Person.class文件进内存
        Class clazz = Class.forName("com.qiu.Person");        //获取该类指定的属性age  getDeclaredField----> 获取所有属性,包括私有
        Field field = clazz.getDeclaredField("age");        //获取该类指定的属性name
        Field field2 = clazz.getDeclaredField("name");        //通过clazz实列化对象
        Object obj = clazz.newInstance();        //暴力访问。如果不设置默认为false是访问不到私有属性的。
        field.setAccessible(true);        //暴力访问。
        field2.setAccessible(true);        //初始化属性值
        field.set(obj, 123);
        field2.set(obj, "李白");        //获取该字段的值。
        Object o = field.get(obj);
        Object o1 = field2.get(obj);
        System.out.println(o);
        System.out.println(o1);        /*** 通过更简洁的方法获取指定方法 **/
        Method method = clazz.getMethod("getAge", null);
        System.out.println(method.invoke(obj, null));    /******** 通过反射获取带参数的方法  ******************************/

        Class clazz2 = Class.forName("com.qiu.Person");
        Method method41 = clazz2.getMethod("demo",String.class);
        Object obj3 = clazz.newInstance();
        System.out.println(method41.invoke(obj3, "邱某"));

    }
}
ログイン後にコピー

印刷結果は次のとおりです:

123
李白
123
Qiu

関連記事:

仕事でよく使うJavaのリフレクション

Javaのリフレクションの仕組み

以上が反射技術とは何ですか? Java で最も一般的に使用されるリフレクション テクノロジの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート