反射

1.是java提供的动态执行机制,动态加载类,动态创建对象,动态访问属性,动态调用方法

静态与动态

  静态:事先约定的规则,执行期间按照固定执行规则

  动态:事先没有约定,在执行期间动态确定执行规则

  java中的静态执行;编译已经就确定执行规则,在运行期间按照编译结果顺序执行

  java中的动态执行:运行期间才能确定加载那些类,创建那些对象,执行那些方法

  2.java提供了动态加载类的api

  class cls = Class.forName(类名);

  3.动态创建对象

  object obj= cls.newInstance();

  执行cls引用的类的信息中的无参构造器,动态创建对象实例,

  提示:反射可以调用有参构造器

  4.动态获取类的方法信息

    cls.getDeclaredMethods() *带s,返回数组

  5.动态的执行方法

    method.invoke(被调用的对象,传递的参数 )

    例如:购买饮料.invoke(小卖铺,钱)

    在invoke方法执行的时候,必须传递包含当前方法的对象

  6.使用invoke

    invoke可以使用私有方法

    1.先找到该私有方法(共有也可以)

      Class 提供了根据方法签名找到指定的方法信息的API

      方法签名 = 方法名+类型列表(Class[])

      Method method=class.getDeclaredMethod(方法名,类型列表); *不带s,找到返回方法名,找不到抛异常

      打开方法的执行权限

      method.setAccessible(true)//该方法违反了封装的一件事情,不建议使用

      调用invoke

      method.invoke(被调用的对象,传递的参数 )

  7.反射用途(不知道类名,方法名,只知道执行的结果要用反射)

          *1.eclipse中解析类的结构使用了反射

            *2.Junit识别被测试方使用了反射

            *3.Spring管理Bean对象,注入Bean属性使用了反射

              *4.注解的解析使用了反射

              *5.强行执行私有方法(访问私有属性)

  8.检查一个注解的信息:

    方法名.getAnnotation(注解名.class);

你可能感兴趣的:(反射)