ホームページ  >  記事  >  Java  >  Java リフレクション メカニズムの機能は何ですか?

Java リフレクション メカニズムの機能は何ですか?

PHPz
PHPz転載
2023-04-25 17:19:071706ブラウズ

関数の説明

1. 操作中にオブジェクトが属するクラスを決定します。

2. 実行時に任意のクラスのオブジェクトを構築します。

3. 運用中に任意のクラスのメンバー変数とメソッドを決定します。

4. 操作中に情報を受信します。

実行時に任意のオブジェクトのメンバー変数とメソッドを呼び出します。

実行時にコメントを処理します。

動的プロキシを生成します。

@Test
public void test1() throws Exception {
    Class<Person> clazz = Person.class;
    //1.通过反射,创建Person类对象
    Constructor<Person> cons = clazz.getConstructor(String.class, int.class);
    Person person = cons.newInstance("Tom", 12);
    System.out.println(person);//Person{name='Tom', age=12}
 
    //2.通过反射,调用对象指定的属性、方法
    //调用属性
    Field age = clazz.getDeclaredField("age");
    age.setAccessible(true);
    age.set(person, 10);
    System.out.println(person.toString());//Person{name='Tom', age=10}
 
    //调用方法
    Method show = clazz.getDeclaredMethod("show");
    show.invoke(person);//my name is Tom and age is 10
 
    System.out.println("===================================");
    //通过反射,可以调用Person类的私有结构的。比如:私有的构造器、方法、属性
    //调用私有的构造器
    Constructor<Person> cons1 = clazz.getDeclaredConstructor(String.class);
    cons1.setAccessible(true);
    Person p1 = cons1.newInstance("Bruce");
    System.out.println(p1);//Person{name='Bruce', age=0}
 
    //调用私有的属性
    Field name = clazz.getDeclaredField("name");
    name.setAccessible(true);
    name.set(p1, "Jarry");
    System.out.println(p1);
 
    //调用私有的方法
    Method nation = clazz.getDeclaredMethod("nation", String.class);
    nation.setAccessible(true);
    Object nation1 = (String) nation.invoke(p1, "China");//相当于String nation = p1.showNation("China")
    System.out.println(nation1);//I come from China
}

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

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。