反射

一、反射
反射:利用类加载时在堆中创建的java.lang.Class对象去获得该类类加载以后在方法区中创建的类信息、方法信息、变量信息.....

反射:把java类中的各种结构(方法 属性 构造器 类名)映射成一个个java对象

获取Class对象
1。对象名.getClass()
2。类.class()
3。Class.forName(包名.类名)

 可以动态创建对象 低耦合


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();...            

 

posted @ 2019-12-02 19:55  下饭  阅读(99)  评论(0编辑  收藏  举报