java反射基础(很详细,很详细,很详细)

小灰灰 2021-01-22 14:26 1001阅读 0赞

反射: 框架设计的灵魂

  • 框架:半成品软件。可以再框架的基础上进行软件开发,简化编码
  • 反射:将类的各个组成部分封装为对象,这就是反射

    • 好处 :

      1. 可以在程序运行过程中,操作这些对象。
      2. 可以解耦,提高程序的可扩展性。
  • 获取class对象的方式:
    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzY0OTk5Nw_size_16_color_FFFFFF_t_70

    1. Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象
      多用于配置文件,将类名定义在配置文件。读取文件,加载类
    2. 类名.class:通过类名的class属性获取
      多用于参数的传递
    3. 对象名.getClass():getClass()方法在Object中有定义
      多用于对象的获取字节码的方式

      • 结论:
        同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论使用何种方式,加载的都是同一对象。
  • class对象的功能:

    • 获取功能:

      1. 获取成员变量

        1. + Field[ ] getFields() :获取所有public的成员变量。
        2. + Filed[ ] getField(String name): 获取指定名称的public修饰的成员变量。
        3. + Field[ ] getDeclaredFields() : 获取所有成员变量,无视修饰符。
        4. + Field[ ] getDeclaredField(String name): 获取指定名称的成员变量,无视修饰符。
      2. 获取构造方法

        1. * Constructor<?>[] getConstructors()
        2. * Constructor<T> getConstructor(类<?>... parameterTypes)
        3. * Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
        4. * Constructor<?>[] getDeclaredConstructors()
      3. 获取成员方法

        1. * Method[] getMethods()
        2. * Method getMethod(String name, 类<?>... parameterTypes)
        3. * Method[] getDeclaredMethods()
        4. * Method getDeclaredMethod(String name, 类<?>... parameterTypes)
      4. 获取全类名

        1. * String getName()
  • Field: 成员变量

    • 操作:

      1. 1. 设置值
      2. void set(Object obj,Object value)
      3. 2. 获取值
      4. get(Object obj)
      5. 3. 忽略权限访问修饰符的安全检查
      6. setAccessible(true):暴力反射
  • Constructor:构造方法

    • 创建对象:

      • T newInstance(Object… initargs)
      • 如果使用空参数构造方法创建对象,操作简化为:Class对象的newInstance方法。
  • Method: 方法对象

    • 执行方法:

      • Object invoke(Object object,Object… args)
    • 获取方法的名称:

      • String getName:获取方法名

发表评论

表情:
评论列表 (有 0 条评论,1001人围观)

还没有评论,来说两句吧...

相关阅读