【java】反射基础知识总结
反射
程序运行过程中操作字节码文件。
反射入口
Class对象(字节码文件对象)
获取Class对象
1. 方式1:类名.Class;
2. 方式2:对象名.getClass();
3. 方式3:Class.forName(包名+类名);
常见的方法
1.获取类对象的包名+类名:类对象.getName();
2.获取类对象类名:类对象.getSimpleName();
3.获取类对象继承的类:类对象.getSuperClass();
4.获取类对象实现的接口:类对象.getInterfaces();
属性对象
获取属性对象:
1.类对象.getFiled("属性名"); -> 获取能够访问到的本类|父类中属性的属性对象。
2.类对象.getFileds(); -> 获取能够访问到的本类|父类中所有属性的属性对象。
3.类对象.getDeclaredField("属性名"); -> 获取本类中属性的属性对象(和访问权限修饰符无关)
4.类对象.getDeclaredFields(); -> 获取本类中所有属性的属性对象(和访问权限修饰符无关)
操作属性对象:
1.通过属性对象完成实例化对象属性的赋值
当属性为不能直接访问的属性,设置突破访问权限修饰符的限制,属性对象.setAccessible(true);
属性对象.set(实例化对象,值)
2.通过属性对象获取实例化对象的属性值
属性为不能直接访问的属性,设置突破访问权限修饰符的限制,属性对象.setAccessible(true);
方法对象
获取方法对象:
1.类对象.getMethod("方法名",可变长参数参数类型的类对象); -> 获取本类中|父类中可以被访问方法的方法对象
2.类对象.getMethods(); -> 获取本类中|父类中所有可以被访问方法的方法对象
3.类对象.getDeclaredMethod("方法名",可变长参数参数类型的类对象); -> 获取本类中方法的方法对象(和访问权限修饰符无关)
4.类对象.getDeclaredMethods(); -> 获取本类中所有方法的方法对象(和访问权限修饰符无关)
操作方法对象:
1.通过方法对象执行实例化对象中的方法
方法为不能直接访问的方法,设置突破访问权限修饰符的限制,方法对象.setAccessible(true);
方法对象.invoke(实例化对象, 可变长参数参数实参);
实例化对象
1.new 构造方法
2.通过构造器对象(构造方法对象)实例化对象
1.使用无参构造方法对象
Constructor<?> constructor = 类对象.getConstructor();
数据类型 对象名 = constructor.newInstance();
2.使用有参构造方法对象
Constructor<?> constructor = 类对象.getConstructor(参数类对象,...);
数据类型 对象名 = constructor.newInstance(实参,...);