Class clazz = Class.forName("com.heima.bean.Person");
Constructor c = clazz.getConstructor(String.class,int.class); //获取有参构造(这是在知道构造方法的情况下获取,如果不知道,可以先通过getDeclaredConstructors()方法,获取所有的构造方法,即使是私有的)
Person p = (Person) c.newInstance("张三",23); //通过有参构造创建对象
System.out.println(p);
反射获取类的成员变量:
方法:
getFields(); //获取所有公共的成员变量
getDeclaredFields();// 获取所有的成员变量
getField(String name);// 获取单个的成员变量
伪代码:
Class clazz = Class.forName("com.heima.bean.Person");
Constructor c = clazz.getConstructor(String.class,int.class); //获取有参构造
Person p = (Person) c.newInstance("张三",23); //通过有参构造创建对象 //修改姓名的值
Field f = clazz.getDeclaredField("name"); //暴力反射获取字段
f.setAccessible(true); //去除私有权限
f.set(p, "李四");
System.out.println(p);
反射获取类的成员方法:
方法:
getMethods(); // 获取所有公共方法,包括父类的
getDeclaredMethods(); // 获取本类的所有方法
伪代码:
Class clazz = Class.forName("com.heima.bean.Person");
Constructor c = clazz.getConstructor(String.class,int.class); //获取有参构造
Person p = (Person) c.newInstance("张三",23); //通过有参构造创建对象
Method m = clazz.getMethod("eat"); //获取无参eat方法
m.invoke(p);
Method m2 = clazz.getMethod("eat", int.class); //获取有参的eat方法
m2.invoke(p, 10);