Java反射(Reflect)技术
概念:动态获取在当前Java虚拟机中的类、接口或者对象等等信息(运行过程中读取内容)1.作用(面试问题):
1.1 解除两个类之间的耦合性,即在未得到依赖类的情况下,自身应用可以通过编译
1.2 动态依赖注入(即需要某一类对象时动态生成类实例,并设置到被依赖的类中),减少编译时的内存开销 (大多框架都用)2.获取Class对象的三种方式:(重要)
2.1、使用Class类的静态方法: Class.forName(String name) jdbc注册驱动使用过;2.2、类的语法:T.class,代表了与其匹配的Class对象 json:解析:fastjson,gson,org开头的。。。
2.3、使用类的实例化的getClass方法: obj.getClass()
3.获取类的构造器java.lang.reflect.Constructor(了解)
3.1 public Constructor<?>[] getConstructors() 返回类中所有的public构造器集合,默认构造器的下标为03.2 public Constructor<T> getConstructor(Class<?>... parameterTypes) 返回指定public构造器,参数为构造器参数类型集合
3.3 public Constructor<?>[] getDeclaredConstructors() 返回类中所有的构造器,包括私有
3.4 public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回任意指定的构造器
3.5 Constructor重要的方法newInstance(Object ...initargs) 实例化类
4.获取类的成员变量java.lang.reflect.Field(重要)
4.1 public Field[] getFields() 获取所有的public成员变量4.2 public Field getField(String?name) 获取任意public成员变量
4.3 public Field[] getDeclaredFields() 获取所有的成员变量
4.4 public Field getDeclaredField(String?name) ?获取任意指定名字的成员变量
4.5 public void setAccessible(boolean flag) 设置私有属性是否可访问
4.6 Field 重要方法set(Object obj, Object value) 字段设置为指定的新值。5.获取类的方法java.lang.reflect.Method(重要)
5.1 public Method[] getMethods() 获取所有的共有方法的集合5.2 public Method?getMethod(String?name,Class<?>... parameterTypes) 获取指定公有方法
5.3 public Method[] getDeclaredMethods() ?获取所有的方法
5.4 public Method getDeclaredMethod(String?name,Class<?>... parameterTypes) 获取任意指定方法
5.5 Method重要方法invoke(Object obj ,Object…parmasType) 执行对象的方法,第一个参数为类实例对象,第二个参数:对象方法的参数
6.Class类的实例化方法 newInstance()
7.获取类的全名:getName() ;包名+类名
8.获取类的简称:getSimpleName() 类名
9.获取类的包名:getPackage() 包名