代码演示
package 反射;
import java.sql.Struct;
public class Student {
private String name;
private int age;
private String address;
public Student(){
}
public Student(String name, int age, String address){
this.name = name;
this.age = age;
this.address = address;
}
private Student(String name){
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
package 反射;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
public class Main {
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class<Student> studentClass = Student.class;
// Constructor<Student> constructor = studentClass.getConstructor(String.class, int.class, String.class);
// Student student = constructor.newInstance("青霞", 30, "西安");
// System.out.println(student);
Constructor<Student> con = studentClass.getConstructor(); //采用无参构造的方法创建对象
Field age = studentClass.getDeclaredField("age");
age.setAccessible(true);
age.set(con,10);
}
}
- 这里的
set
是给对象的age
属性赋值为10
getDeclaredField
是为了能获得私有的属性(字段)- 一定要注意,因为
Student
中的age
也是私有属性,因此应该设置setAccessble
为true