zoukankan      html  css  js  c++  java
  • Java中的反射

    类加载基础知识:



    类只初始化一次。

    类加载器:


    反射:


    通过Class来使用Teacher和student类的内容。

    获取Class对象的方式(三种):

    为什么要学反射,什么是反射?

    反射就是不写出要想要创建的对象的类,但是依旧可以创建出该类的对象的魔法!

    在框架中,我们无论写什么类,都可以被框架使用,就是利用了反射。

    a.txt存储了我们书写的类的位置。
    然后字符缓冲流读入这个文件。
    然后就可以通过反射搞到这个对象。

    三种方式获得Class对象:


    这种灵活性最高,可以使用配置文件来完成配置。

    获得Aniki类的公共构造函数数组和单个构造函数并且创建对象:

    构造函数数组:


    这是我们的Aniki类:

    举例:

    换成Constructor<?>[] declaredConstructors = Aniki_Class.getDeclaredConstructors();可以拿到全部。

    创建无参对象:


    我们获得的是public的无参构造函数,并且该对象名为constructor。constructor.newInstance()方法相当于使用
    Aniki的无参构造方法,创造了一个Aniki类的aniki对象。

    创建public有参对象:


    创建private有参对象:


    要使用暴力反射setAccessible(true)取消访问检查。

    反射获取成员变量并使用:


    打印结果啥都没有,因为咱们全都是private类型的成员变量。

    换成getDeclaredFields()就有了。

    给private成员赋值,如果是public则使用getField()方法并且无需setAccessible(true);

    反射获取成员方法并使用:

    方法数组参照之前的例子
    Method[] methods = Aniki_Class.getMethods();//所有的public方法包括从父类继承的
    Method[] declaredMethods = Aniki_Class.getDeclaredMethods();//所有public和private但是不包括父类的。
    让private成员函数执行,如果是public则使用getMethod()方法并且无需setAccessible(true);

    在ArrayList中添加字符串:


    我们可以看到getMethod方法的参数是Object类型的。
    结果:

    反射可以越过泛型检查,获取它原始方法所需要的参数类型。

    反射结合Properties配置文件:


    略有尴尬,暂时无法表示配置文件的参数,所以我们含参的Method的参数
    String.class, Integer.class, int.class还是要写在外面。
    配置文件:

    结果:

  • 相关阅读:
    Python SocketServer模块
    网络爬虫urllib:request之urlopen
    1.numpy的用法
    21天打造分布式爬虫-简书整站爬取(十)
    21天打造分布式爬虫-下载汽车之家图片(九)
    21天打造分布式爬虫-Crawl类爬取小程序社区(八)
    21天打造分布式爬虫-Spider类爬取糗事百科(七)
    21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)
    21天打造分布式爬虫-多线程下载表情包(五)
    21天打造分布式爬虫-中国天气网和古诗文网实战(四)
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/11964541.html
Copyright © 2011-2022 走看看