创建一个类,并重写ToString方法(快捷键重写)
public class Person {
private String name;
private int age;
public String ID;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", ID='" + ID + '\'' +
'}';
}
}
测试类
public static void main(String[] args) throws Exception {//抛异常
//获取Person的class对象
Class personClass = Person.class;
//获取成员变量
Field[] fields = personClass.getFields();//获取public修饰的成员变量
for (Field field : fields) {
System.out.println(field);
}
//获取共有字段ID
Field ID = personClass.getField("ID");
//获取成员变量ID的值
Person p = new Person();
Object value = ID.get(p);
System.out.println(value);//输出成员变量ID的值,此时应该为空值
//设置ID的值
ID.set(p,"123456789");
//输出p对象,其中包含ID的值
System.out.println(p);
}
上述的方法能获取字段和设置字段,但是只能获取和设置共有(public)字段,下面通过**Field[]getDeclaredFields()**这种方法可以获得所有字段,包括私有(private)
public static void main(String[] args) throws Exception {//抛异常
//获取Person的class对象
Class personClass = Person.class;
//方法2:获取所有的成员变量,不考虑修饰符 Field[] getDeclaredFields()
Field[] declaredFields = personClass.getDeclaredFields();
for (Field declaredField:declaredFields){
System.out.println(declaredField);
}
//选择name作为把获取的私有字段
Field name = personClass.getDeclaredField("name");
//忽略访问权限修饰符的安全检查
name.setAccessible(true);//暴力反射
//获取并打印私有字段name
Object value2 = name.get(p);
System.out.println(value2);
//设置name的值并打印
name.set(p,"张三");
System.out.println(p);
}