java的反射基础笔记

时间:2023-02-15 11:26:17
  1. 反射reflect
    1.1 Class(描述类的类)
    获得类对象的三种方式

    1.1.1 通过字符串的类名获取
    Class c = Class.forName(“com.direct.Person”);
    1.1.2 通过类.class来获取
    Class c = Person.class;
    1.1.3 通过对象.getClass()来获取
    Person p = new Person();
    Class c = p.getClass();
    1.2 Constructor(描述构造方法的类)
    1.2.1 获得构造方法
    getConstructors // 获取所有public构造方法
    getConstructor(new Class[] {..}) //获取指定参数列表的可见构造方法
    getDeclaredConstructor(new Class[]{…})// 获取声明的构造方法(包括私有的)
    getDeclaredConstructors //获取所有构造方法(包括私有的)

    1.2.2 根据构造方法创建对象
    cons.newInstance(new Object[]{..})
    1.3 Field(描述属性的类)
    1.3.1 获取属性
    Field[] fs1 = c.getFields(); // 获取拥有的public的属性(包括继承来的属性)
    Field[] fs2 = c.getDeclaredFields(); // 获取自己类中声明的属性(包括私有属性)
    Field f1 = c.getField(“name”);
    Field f2 = c.getDeclaredField(“name”);
    1.3.2 访问属性
    Feild f = c.getFeild(“name”);
    f.set(obj,value);// 设置obj对象的name属性值为value,相当于obj.name = value;
    Object value = f.get(obj); // 获取obj对象的name属性值 相当于 Object value = obj.name;

    f.setAccessible(true); // 设置name属性可以被访问(修改访问权限,private也可以修改)
    1.4 Method(描述方法的类)
    1.4.1 获取方法
    c.getMethod(name, parameterTypes)
    c.getMethods()
    c.getDeclaredMethod(name, parameterTypes)
    c.getDeclaredMethods()

    1.4.2 执行方法
    Method m1 = c.getMethod(“eat”, new Class[]{});
    // 执行对应的方法
    Object r = m1.invoke(o, new Object[]{});// 执行o对象的eat方法,用r来接收返回值
    m1.setAccessible(true);