java 反射中的属性
- 创建一个类Person,设置phoneNumber属性为public.为了方便演示。
- 我们接下来,通过获取这个属性和一个私有属性,给对象设置值。
package com.zm.bean;
public class Person {
private String name;
private int age;
public String phoneNumber;
private Person(String name){
this.name = name;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
private void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", phoneNumber='" + phoneNumber + '\'' +
'}';
}
}
- 接下来通过反射获取属性
public class DemoGetField {
public static void main(String[] args) throws Exception {
// 1.加载类
Class pClass = Class.forName("com.zm.bean.Person");
// 2.获取构造方法
Constructor c = pClass.getConstructor();
// 3.通过构造方法,创建对象
Object o = c.newInstance();
// 4.获取类的属性
Field phoneNumber = pClass.getField("phoneNumber");
Field name = pClass.getDeclaredField("name");
// 5.忽略权限检查
name.setAccessible(true);
// 6.设置name和phoneNumber
name.set(o,"王五");
phoneNumber.set(o,"1933372912");
// 7.打印查看
System.out.println(o);
}
}
结果如下: