Java反射之调用成员变量
通过反射机制还可以调用成员变量,调用方法需要使用Field对象,它对应着一个方法,获得Field对象 需要使用Class类的如下方法:
- Field[] getFields():返回所有公有成员变量Field对象数组。
- Field[] getDeclaredFields():返回所有成员变量Field对象数组。
- Field getField(String name):通过指定公共成员变量名返回Field对象。
- Field getDeclaredField(String name):通过指定成员变量名返回Field对象。
现有一个Person类,它的代码如下:
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
现在编写一个程序通过反射机制调用Person类的私有成员变量name和age,具体代码如下:
public class HelloWorld {
public static void main(String[] args) {
try {
Class clz = Class.forName("Java反射机制.调用成员变量.Person");
// 调用默认构造方法
Person person = (Person) clz.newInstance();
// 返回成员变量名为name的Field对象
Field name = clz.getDeclaredField("name");
// 设置成员变量accessible标志为ture:accessible是可访问性标志,值为 true 则指 示反射的对象在使用时应该取消Java语言访问检查
name.setAccessible(true);
// 为成员变量name赋值
name.set(person,"tony");
// 返回成员变量名为age的Field对象
Field age = clz.getDeclaredField("age");
// 设置成员变量accessible标志为ture
age.setAccessible(true);
// 为成员变量age赋值
age.set(person,21);
// 获取成员变量保存的数据
System.out.printf("[name:%s, age:%d]",name.get(person),age.get(person));
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
[name:tony, age:21]
以上内容仅供参考学习,如有侵权请联系我删除!
如果这篇文章对您有帮助,左下角的大拇指就是对博主最大的鼓励。
您的鼓励就是博主最大的动力!
还没有评论,来说两句吧...