反射

4个对象

  1. Class:class 文件

    获取 Class 方法类.class对象.getClass()Class.forName("全限定类名")

  2. Field:成员变量

  3. Method:成员方法

  4. Constructor:构造方法

Class 常用 API

作用 方法 说明
获取类全限定名 clazz.getName()、`clazz.getCanonicalName() 如果内部类,这俩方法返回值有区别
获取类名 clazz.getSimpleName()
是否是接口 clazz.isInterface()
获取实现的接口 clazz.getInterfaces() 所有接口,多层
获取父类 clazz.getSupercalss() 直接父类(爷爷辈的获取不了)
使用无参构造创建实例 clazz.newInstance() 没有无参构造会报错
获取字段 clazz.getFields()
clazz.getField(字段名)
clazz.getDeclaredFields()
clazz.getDeclaredField(字段名)
带 Declared:能获取私有、但不包括继承
不带 Declared:只能获取 public,但包括继承
获取方法 clazz.getMethods()
clazz.getMethod(方法名, 可变参数)
clazz.getDeclaredMethods()
clazz.getDeclaredMethod(方法名, 可变参数)
参数是可变参数,可传任意类型的 class
clazz.getMethod("draw", int.class, String.class)

Field 常用 API

作用 方法 说明
暴力反射 setAccessible(true) private 字段不能调用 get 和 set,暴力反射后可以
修改属性值 set(目标对象, 值) 对于 final 字段不会报错,但实际上该字段的值不会改变
获取属性值 get(目标对象)
获取属性名称 getName()
获取属性类型 getType() 是一个 Class 对象
属性是否是枚举 isEnumConstant()

Method 常用 API

方法 作用
执行方法 invoke(目标对象, 可变参数)
获取方法返回值 getReturnType() 是一个 Class 对象
posted @ 2023-03-01 18:09  CyrusHuang  阅读(13)  评论(0编辑  收藏  举报