/ 获取私有的成员变量
for (Field field : fields) {
System.out.println("公共的成员变量"+field);
}
for (Field field : declaredFields) {
System.out.println("私有的成员变量"+field);
}
// 通过无参构造方法创建对象
Constructor con = c.getConstructor();
Object obj = con.newInstance();
// 获取单个的成员变量
// 获取address并对其赋值
Field addressField = c.getField("address");
// public void set(Object obj,Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
addressField.set(obj, "北京"); // 给obj对象的addressField字段设置值为"北京"
System.out.println(obj);
// 获取name并对其赋值
// NoSuchFieldException
Field nameField = c.getDeclaredField("name");
// IllegalAccessException
nameField.setAccessible(true);
nameField.set(obj, "小明");
System.out.println(obj);
// 获取age并对其赋值
Field ageField = c.getDeclaredField("age");
ageField.setAccessible(true);
ageField.set(obj, 27);
System.out.println(obj);
}
}
全部的成员变量public java.lang.String renxixiao.Person.address
私有的成员变量private java.lang.String renxixiao.Person.name
私有的成员变量int renxixiao.Person.age
私有的成员变量public java.lang.String renxixiao.Person.address
Person [name=null, age=0, address=null]
Person [name=null, age=0, address=北京]
Person [name=小明, age=0, address=北京]
Person [name=小明, age=27, address=北京]
通过反射获取获取方法并使用
/*
* 通过发生获取方法并使用
*/
public class ReflectDemo {
public static void main(String[] args) throws Exception {
// 获取字节码文件对象
Class c = Class.forName("renxixiao.Person");
// 获取所有的方法
Method[] methods = c.getMethods(); // 获取自己的包括父亲的公共方法
Method[] methodss = c.getDeclaredMethods(); // 获取自己的所有的方法
for (Method method : methods) {
System.out.println("公共方法"+method);
}
for (Method method : methodss) {
System.out.println("所有的方法"+method);
}
Constructor con = c.getConstructor();
Object obj = con.newInstance();
// 获取单个方法并使用
// public void show()
// public Method getMethod(String name,Class<?>... parameterTypes)
// 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型
Method m1 = c.getMethod("show");
// public Obj