zoukankan      html  css  js  c++  java
  • 反射 Reflect

    1. 解释:

      (1) 给一个类,照透视,可以获得一个类的定义信息:

      包名、类名
    
      成员变量的定义信息
        getFields();  获得所有可见(私有的不能获得)的成员变量,包括继承的变量
        getDeclaredFields()  本类定义的所有成员变量,包括私有变量,不包括继承变量
        getField(变量名)    获得一个变量
        getDeclaredField(变量名)  获得一个变量
      构造方法的定义信息
        getConstructors();  所有可见的构造方法
        getDeclaredConstructors()  所有的构造方法,包括私有的
        getConstructor(参数类型列表)  获得一个构造方法
        getDeclaredConstructor(参数类型列表)  获得一个构造方法
      方法的定义信息
        getMethods()  获得可见的方法。包括继承的方法
        getDeclaredMethods()  获得本类定义的所有的方法,包括私有的,不包括继承的
        getMethod(方法名,参数列表)  获得一个方法
        getDeclaredMethod(方法名,参数列表)  获得一个方法
    练习参考下篇随笔:https://www.cnblogs.com/gxlaqj/p/11429177.html

      (2)反射新建实例(创建对象)

        执行无参构造  //c 为类对象  
    
          Object obj = c.new Instance();
    
        执行有参构造
    
          //获得构造方法
    
           Constructor cc = c.getConstructor(int.class,String.class);
    
          //新建实例,并执行这个有参构造
    
          Object obj = cc.newInstance(5,"abc");
    
    练习参考下篇随笔:https://www.cnblogs.com/gxlaqj/p/11429177.html

      (3).反射调用成员变量

         获取成员变量
          Field f = c.getDeclaredField(变量名);
        使私有变量也能访问
          f.setAccessible(true);
        给变量赋值
          f.set(实例,值);
            若是静态方法。第一个参数给null
        取值
          f.get(实例);
            j静态方法,第一个参数给null;

      (4).反射调用成员方法

      获取方法
        Method m = c.getMethod(方法名,参数类型列表);
      使私有方法可以被调用
        m.setAccessible(true);
      调用方法:
        m.invoke(实例,具体参数数据);
        如果静态方法,第一个参数给null
        如果是void方法,返回值是null

    2. 反射需要使用 类对象 

      类对象:一个类被加载到方法去,会创建一个“类对象”,类型是Class类型

      获取类对象:

        (1)类名.class

          String.calss

          Integer.class

          Soldier.class

        (2)Class.forName(“完整类名”)

        (3)对象.getClass();

    3. 获得包名类名

      //c 为类对象

      c.getPackget().getName();  获得字符串包名

      c.getName()  完整类名(包含包名)

      c.getSimpleName()  获得简写类名(不包含包名)

    4.  反射用来做动态编程

      一些程序中,有固定的执行流程

      程序执行流程中的组件,可以通过配置文件来配置

      SSM框架底层都是反射实现的

        

  • 相关阅读:
    python 中的深拷贝和浅拷贝
    时间复杂度
    为什么l1和l2可以防止过拟合
    逻辑回归实现多分类
    《深入浅出数据分析》读书笔记
    牛客网的输入和输出
    万物皆可embedding
    NLP中的mask的作用
    不同语言对单例模式的不同实现
    ElasticSearch 索引 VS MySQL 索引
  • 原文地址:https://www.cnblogs.com/gxlaqj/p/11428526.html
Copyright © 2011-2022 走看看