Java反射机制:

功能:

  • 在运行中分析类的能力
  • 在运行中查看对象
  • 实现通用的数组操作代码
  • 利用Method对象,类似C++中的函数指针

Class是保存着所有对象的信息的类,一个Class对象表示一个特定类的属性。
Field、Method、Constructor三个类分别用来描述类的域、方法和构造器。

用法:

  1. 实例化class类对象 :
  • Class.forName("类名")
  • Obj.class
  • obj.getClass()
  1. 获得完整的包名和类名:
    class.getName()
  2. 获取对象的父类:
    class.getSuperClass()
  3. 实现的接口:
    class.getInterfaces()
  4. 调用无参构造器创建实例:
    class.newInstance()
  5. 获取构造器:
  • 公有:class.getConstructors()
  • 全部:class.getDeclaredConstructors()
  1. 获取成员变量:
  • 公有:class.getFields()
  • 全部:class.getDeclaredFields()
  1. 获取成员方法:
  • 公有:class.getMethods()
  • 全部:class.getDeclaredMethod()
  1. 以整数的形式返回修饰符:
    constructor/field/method.getModifiers()
    ,可以使用Modifier.toString(int),isPublic(int)等方法
  • 0--无修饰符
  • 1--public
  • 2--private
  • 4--protected
  • 8--static
  • 16--final
  • 32--synchronized
  • 64--volatile
  • 128--transient
  • 256--native
  • 512-interface
  • 1024--abstract
  • 2048--strict
  1. 获取名字:getName()
  2. 描述参数类型的Class对象数组:
    constructor/method.getParameterTypes();
  3. 描述返回类型:
    method.getReturnType();
  4. 为反射对象设置可访问标志:
  • accessibleObject.setAccessible(boolean )
  • AccessibleObject.setAccessible(accessibleObject , boolean)
  1. 返回对象中用Field表示的成员变量值:
    field.get(obj)
  2. 用新值设定对象中Field表示的成员变量:
    filed.set(obj,value)
  3. 调用任意方法:
    method.invoke(...)

你可能感兴趣的:(Java反射机制:)