什么是反射技术?
动态获取指定类以及类中的内容(成员),并运行其内容。应用程序已经运行,无法在其中进行new对象的建立,就无法使用对象。这时可以根据配置文件的类全名去找对应的字节码文件,并加载进内存,并创建该类对象实例。这就需要使用反射技术完成,还有就是在一个类中,为了不让外界访问到有的属性和方法,通常将其设置为private,这时我们就可以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 邱某
相关文章:
以上就是什么是反射技术?Java中最常用的反射技术实例的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号