一、反射
反射:利用类加载时在堆中创建的java.lang.Class对象去获得该类类加载以后在方法区中创建的类信息、方法信息、变量信息.....
1.Class c=Class.forName("[类全包名+类名]/[全限定名]");//通过类加载器加载全限定名对应的类;
可以利用类的Class对象可以创建对象,访问属性,访问方法,访问构造器
2 : 创建对象: c.newInstance();
3. 获得属性镜像: Field field = c.getField("属性名");
Field[] fields = c.getFields();//获取所有公共的属性
Field[] fields = c.getDeclaredFields();//获取所有公开的属性
4. 获得方法镜像: Method method = c.getMethod("方法名",参数1.class,参数2.class...);
Method method = c.getDeclaredMethod("方法名",,参数1.class,参数2.class...);
4.1:利用方法镜像调用目标对象的方法:
Object returnValue = method.invoke(obj, args...);
4.2:利用方法镜像获得方法的返回值类型
method.getGenericReturnType();
4.3:利用方法镜像获得方法的修饰符
method.getModifiers()
4.4:利用方法镜像获得方法名
method.getName();
4.5:利用方法镜像获得方法的参数列表
method.getGenericParameterTypes();
4.6:利用方法镜像获得方法的异常
method.getGenericExceptionTypes();
5.获取构造器镜像:Constructor<?>[] constructors = c.getConstructors();
Constructor<?> constructor2 = c.getConstructor(参数1.class,参数1.class,...);
5.1:利用构造器镜像 创建对象
constructor.newInstance(参数,参数,...);//用有参构造器创建对象
注意:反射创建对象有两种方式:
1,直接用class.newInstance();//调用无参构造器创建对象
2,利用class获得有参构造器,然后调用newInstance(参数...);
6 : 获取注解镜像:getDeclaredAnnotations(); 或者 getAnnotations();
注:获取方法上的注解就使用 method.getAnnotations();或者 method.getDeclaredAnnotations(); 获取属性上的注解就使用 field.getAnnotations();...