反射:
1.反射其实操作的就是class 字节码文件,通过对class字节码文件的操作来完成动态操作的效果
2.操作反射
1.获得class字节码对象,在内存之中有且只有一份
2.获得字节码对象的三种方式
2.1 类.class
2.2 对象.getClass
2.3 Class.forname(类的全路径)
3.通过反射获得构造方法
3.1 getConstructor()
3.2 getConstructors()
3.3 getDeclaredConstructor();
3.4 getDeclaredConstructors();
如果是带Declared,获得所有包含私有的构造放方法
如果是不带:获得是 public 修饰
如果带s:是获得所有的在Declared
如果不带s: 是获得指定的某一个构造方法
如:Constructor c= getConstructor(String.class) 就會去调用一个含String的构造方法
c.newInstance();
如果调用的是无参构造方法:
clazz.newInstance()
4.Filed
4.1 getFiled()
4.2 getFileds()
4.3 getDeclaredFiled()
4.4 getDeclaredFileds()
比如: Field addressField = c.getField("address");
addressField.set(obj,"西安");
扩展方法:
getType: 返回的是 类型的class--> getType().getSimpleName();
getName:是获得字段名
5.Method
4.1 getMethod()
4.2 getMethods()
4.3 getDeclaredMethod()
4.4 getDeclaredMethods()
比如: Method method = getMethod(方法名,该方法的参数.class)
method.invoke(obj,"有参传参数") |
|