リフレクションテクノロジーとは何ですか?
指定されたクラスとクラス内のコンテンツ(メンバー)を動的に取得し、そのコンテンツを実行します。アプリケーションはすでに実行されており、その中で新しいオブジェクトを作成できない場合、そのオブジェクトは使用できません。この時点で、構成ファイルの完全なクラス名に基づいて対応するバイトコード ファイルを見つけてメモリにロードし、このクラスのオブジェクト インスタンスを作成できます。これにはリフレクション テクノロジの使用が必要です。クラスでは、外部が一部のプロパティやメソッドにアクセスできないようにするために、通常はプライベートに設定されています。このとき、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 で最も一般的に使用されるリフレクション テクノロジの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。