반사기술이란?
지정된 클래스와 클래스에 포함된 콘텐츠(멤버)를 동적으로 획득하고 해당 콘텐츠를 실행합니다. 응용 프로그램이 이미 실행 중이므로 새 객체를 생성할 수 없으면 해당 객체를 사용할 수 없습니다. 이때 구성 파일의 전체 클래스 이름에 따라 해당 바이트코드 파일을 찾아 메모리에 로드하고 이 클래스의 객체 인스턴스를 생성할 수 있습니다. 이를 위해서는 리플렉션 기술을 사용해야 하며, 클래스에서는 외부 세계가 일부 속성과 메서드에 액세스하는 것을 방지하기 위해 일반적으로 비공개로 설정됩니다. 이때 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!