反射:获取属性和方法

创建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); } }

  

未完待续~

posted @ 2020-05-26 09:57  404UnknownCoder  阅读(150)  评论(0)    收藏  举报