反射
在运行状态中,对于任意一个类,都能知道这个类的所有属性与方法,对于任意一个对象都能调用任意方法与属性。
这种动态获取信息和动态调用方法的功能叫做反射
反射作用
用来编写通用性较高的代码 框架使用。
反射中使用的类
class对象:JVM中 类的字节码文件加载到内存形成的一个对象
constructor: 构造方法的信息与访问权限
field:类或者接口的属性,以及访问权限
method: 类或者接口上的方法信息。
Class类
已经类和对象的的情况
类名.class获得
**对象.getclass()**获得
未知类和对象情况(主要使用方法)
**Class.forName(“包名.类名”)**获得
Constructor类
class.getConstructors()
class.getDeclaredConstructor()
括号内为参数列表,需要调用有几个参数,参数什么类型就是类型.class
class.getConstructor(String.class)
- 获得类的所有构造方法
Constructor[] constructors = Class.forName(“包名.类名”).getConstructors(); - 获得指定的构造方法 并且调用
Constructor constructor = Class.forName(“blabla”).getConstructor(String.class)
Field
class.getFields();
class.get(Declared)Field(“blabal”);
Field field = class.get(Declared)Field(“blabal”);
Object object=class.newInstance();
field.set(object,"");
filed.get(object);
私有属性必须要:
field.setAccessible(true);
才能对私有属性进行访问
Method
Method method = class.getDeclaredMethod(String methodname,参数列表String.class等等)
method.setAccessible(true);
method.invoke(object);