Java关于 反射 的一些整理

xiaoxiao2021-02-28  74

关于反射 反射的功能: 可以在运行期间获取任意对象的类型的信息 创建在编译期间完全位置的类的对象 编写一些通用的工具类 原来是通过类名创建对象,现在可以通过对象获取到类的信息 反射的根源:Class对象 所有的类具有共同的特征,那么就可以吧这些抽象成一个Java类描述它,用这个类,来描述所有类的特征,这个类就是Class类 每一个类都是Class类的对象 任意类型的对象,又都是Object的对象 比如String类型就是一个Class的对象 有四种方式可以拿到Class对象 1、类名.class      编写工具类时使用比较多 2、对象.getClass() 3、Class.forName("包名.类名") 4、ClassLoader.getSystemClassLoader().loadClass("包名.类名")         得到了类加载器 5、通过自定义类加载器,类加载器对象.loadClass("包名.类名") 类型可以在编译期间未知,但是在运行期间必须存在可以找到 反射的步骤: 1、获取Class对象 2、通过Class对象,可以: 创建Class对象对应的类型的实例 获取所有的信息(包、类名、属性。。。) 访问定义的实例的属性 设置实例的属性值 调用任意一个方法 eg: 获取包名,是个Package类型,意思就是所有的包也都具有相同的特征,于是就可以抽象成一个类 修饰符的获取,会返回数字,会吧多个修饰符一起返回 Modifier.toString(数字) 就能得到修饰符了 Java中所有类的属性,也都具有相同的一些特征,就可以抽象成一个类Filed,每个属性都是Field的对象 getFiled:获取公共属性 getDeclaredField:获取所有声明的属性 clazz.newInstance() 可以创建一个对象,仅仅用于无参的公共的构造器 否则,要先取到构造器getDeclaredConstructor(形参列表) 然后就可以 构造器.newInstance(实参列表) 私有的属性如果访问的时候,要避免安全检查 setAccessible(true) get(obj) 获取某个对象的属性 set(obj,value) 把某个对象的属性设置成value Java的方法也都具有一些共同的特征,于是就可以抽象成Method类,每一个方法也都是Method对象 getMethod(名称,形参列表的类型) 从所有公共的方法中找 getDeclaredMethod() 在声明的方法中找 在类中找一个方法:就是方法名称+形参列表 method.invoke(obj ,args) 要传实参列表了 泛型父类 Type type = clazz.getGenericSuperClass()  Type类型 ParameterizedType p =(..)type; Type[] array = p.getActualTypeArguments(); 获取到带的泛型信息 获取注解信息(注解配置参数的值) MyField ann = 有配置参数的属性.getAnnotation(MyField.class) 然后获取值 ann.columnName()     类似于直接调用方法一样 注解在声明时,要注意生命周期的设置@Retetion(RetetionPolicy.RUNTIME)
转载请注明原文地址: https://www.6miu.com/read-37432.html

最新回复(0)