反射机制
是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。
反射提供的功能:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
生成动态代理
反射的入口(Class):
获取Class有三种方式:
Class.forName(“全类名”);需要捕捉异常
类名.class;
对象.getClass();
获取所有公共的方法:(本类和父类以及接口的所有public方法)
反射对象.getMethods();
获取所有接口:(多实现:有多个)
反射对象.getinterfaces();
获取父类:
反射对象.getSuperclass();(单继承:只有一个)
获取构造方法:
反射对象.getConstructors()
获取所有的公共属性:
反射对象.getFields();
获取当前类的所有方法:(只有本类的方法)
反射对象.getDeclaredMethods();
获取当前类的所有属性:(只有本类的属性)
反射对象.getDeclaredFields();
获取当前反射所代表的类(接口)的对象(实例):
反射对象.newInstance();需要捕捉异常
修改属性/方法/构造方法的访问权限:
属性/方法/构造方法.getAccessible(true);//打开权限默认是false
方法的调用:
方法.invoke(对象,参数值);
注意:
在反射中,根据类型获取方法时,基本数据类型和包装类是不同的类型