功能:
- 在运行中分析类的能力
- 在运行中查看对象
- 实现通用的数组操作代码
- 利用Method对象,类似C++中的函数指针
Class是保存着所有对象的信息的类,一个Class对象表示一个特定类的属性。
Field、Method、Constructor三个类分别用来描述类的域、方法和构造器。
用法:
- 实例化class类对象 :
- Class.forName("类名")
- Obj.class
- obj.getClass()
- 获得完整的包名和类名:
class.getName() - 获取对象的父类:
class.getSuperClass() - 实现的接口:
class.getInterfaces() - 调用无参构造器创建实例:
class.newInstance() - 获取构造器:
- 公有:class.getConstructors()
- 全部:class.getDeclaredConstructors()
- 获取成员变量:
- 公有:class.getFields()
- 全部:class.getDeclaredFields()
- 获取成员方法:
- 公有:class.getMethods()
- 全部:class.getDeclaredMethod()
- 以整数的形式返回修饰符:
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
- 获取名字:getName()
- 描述参数类型的Class对象数组:
constructor/method.getParameterTypes(); - 描述返回类型:
method.getReturnType(); - 为反射对象设置可访问标志:
- accessibleObject.setAccessible(boolean )
- AccessibleObject.setAccessible(accessibleObject , boolean)
- 返回对象中用Field表示的成员变量值:
field.get(obj) - 用新值设定对象中Field表示的成员变量:
filed.set(obj,value) - 调用任意方法:
method.invoke(...)