public class Student { private String name; private int age; private int score; private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public Student(String name, int age, int score, String address) { super(); this.name = name; this.age = age; this.score = score; this.address = address; } public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public void study(String course){ System.out.println(name+"在学习"+course); } public void study(int course) { System.out.println(name + "在学习" + course); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } } import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReFlectionTest2 { /** * @param args * 框架文件 用反射的方式写构造函数的方法优势是不用将类名写死 运行时决定生成什么对象 */ public static void main(String[] args) { // TODO Auto-generated method stub Class c = null; try { c = Class.forName("day15.Student");//生成类Student的 Class对象 Object obj = c.newInstance();//生成一个无参的构造函数 //生成一个有参的构造函数 Constructor con = c.getDeclaredConstructor(String.class, int.class);// 得到构造函数参数类型为String,int Object obj2 = con.newInstance("zhangsan", 20);//利用上面得到的构造函数,生成一个实例对象 Field f = c.getDeclaredField("name");//得到属性name f.setAccessible(true);// 这样设置就可以访私有变量,不设置会抛异常 //Class day15.ReFlectionTest2 can not access a member of class day15.Student with modifiers "private" String name = (String) f.get(obj2);//得到name这个属性的值 f.set(obj2, "lisi");//设置obj2对象的name属性值 System.out.println(name); // String name=obj.name; Method m = c.getDeclaredMethod("study", String.class); // 得到方法名为study,参数类型为String的方法 m.invoke(obj2, "corejava");//调用得到的方法 // obj2.study("corejava"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }