反射api
反射机制允许程序在运行时进行自我检查,对其内部成员进行操作
实现在运行时对类进行装载,增加对程序的灵活性
功能:
得到一个对象的所属类;获取类的所有变量和方法;运行时创建对象、调用对象方法
获取Class对象的三种方式:
1、Class.forName("类的完全限定名");
2、类名.class;
3、对象.getClass();
String getName();Class类所表示的实体(类,接口,数组类,基本类型或void)完整名称
String getCanonicalName();与getName()方法一样
String getSimpleName();Class类所表示的实体(类,接口,数组类,基本类型或void)类名称
Class getSuperclass(); 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的父类的 Class。
Object newInstance();为类创建一个实例,前提这个类必须得有无参构造方法
ClassLoader getClassLoader();返回这个类的类加载器
Class getComponentType(); 返回表示数组组件类型的 Class。
boolean isArray(); 判定此 Class 对象是否表示一个数组类
boolean isInterface(); 判定此 Class 对象是否表示一个接口
构造方法
Constructor getConstructor();获得类的无参构造方法再通过Constructor的newInstance()创建实例
Constructor getConstructor(Class<?>... parameterTypes);该方法参数与构造器的参数类型的Class对象对应
获得类的有参构造方法再通过Constructor的newInstance(Object ... initargs)创建实例
属性
Field getField(String name);通过属性名获取类的public修饰的属性
通过Field的set(Object obj, Object value)给该属性赋值obj该属性所在类的对象,value设值
Field的get(Object obj)获取该属性值obj该属性所在类的对象
Field[] getFields();获取类的所有public修饰的属性
Field getDeclaredField(String name);通过属性名获取类的任意域的属性
获取私有的属性必须使用Field的setAccessible(boolean flag)方法给予访问的权限
Field[] getDeclaredFields();获取类中所有的属性,同样私有的属性需要给予权限
方法
Method getMethod(String name, Class<?>... parameterTypes);
第一个参数通过方法名获取类中public修饰的方法,第二个参数与该方法参数类型的Class对象对应,若是无参直接给null;
通过Method的invoke(Object obj, Object... args)方法调用该方法,obj该方法所在类的对象,args方法参数
Method[] getMethods();获取类中所有public修饰的方法
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
与getMethod()方法作用一样,但可以获取任意修饰符修饰的方法
private方法仍需要通过setAccessible(boolean flag)给予权限
Method[] getDeclaredMethods();获取类中任意修饰符修饰的方法同样私有的方法需要给予权限
通过Method的getReturnType()方法获取方法返回值类型、getParmenterTypes()方法获取方法的参数列表
上一篇: phalcon 自定义超强日志类
下一篇: 反射api