反射:获取属性和方法
创建java类:父类
public class BaBa{
private String name;//私有属性 public Integer age;//公共属性 public String getName() { return name; } public void setName(String name) { this.name = name; } public Person() {//空参构造 super(); } public void paaa() {//公共方法 } private void pbbb() {//私有方法 }
}
儿子类:
public class son extends BaBa{
private int age; //私有属性
private String name;
public String cname; //公共属性
public void saaa() { //公共方法
}
private void sbbb() {//私有方法
}
}
一, 获取Class对象的三种方式:
1, Class.forName("全类名") Class erziClass = Class.forName("com.reflect.person.Erzi"); 2,ErZi.class Class erziClass = Erzi.class; 3, 对象.getClass Erzi erzi = new Erzi(); Class erziClass = erzi.getClass();
二,获取 Class 的实例
Son son = erzi.newInstance();
三,获取类的所有可见字段(非private)
public static void getFields() throws ClassNotFoundException {
Class<?> son = Class.forName("com.reflect.person.Erzi");
Field[] fields = son.getFields();
for (Field field : fields) {
System.out.println(field);
}
}
四,获取构造方法
public static void constructor() throws Exception {
Class<?> son = Class.forName("com.reflect.person.Erzi");
Constructor<?>[] constructors = son.getConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println(constructor);
}
}
五,获取类的所有属性 及 对 私有属性赋值
5.1 获取所有属性
public static void getFields() throws ClassNotFoundException { Class<?> erzi = Class.forName("com.reflect.person.Erzi"); Field[] fields = erzi.getDeclaredFields(); for (Field field : fields) { System.out.println(field); } }
5.2 获取私有属性并赋值
erzi.getDeclaredField("name");
field.setAccessible(true);
field.set(erzi, "大儿子");
六,获取父类私有属性,方法
public static void getSuper() throws ClassNotFoundException {
Class<?> son = Class.forName("com.reflect.person.Erzi");
Class<?> superclass = son.getSuperclass();//获取父类字节码对象
Field[] fields = superclass.getDeclaredFields();//获取父类的所有属性
for (Field field : fields) {
System.out.println(field);
}
}
未完待续~

浙公网安备 33010602011771号