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还是要写在外面。
    配置文件:

    结果:

  • 相关阅读:
    对象排序
    MYSQL连不上
    JS读取.properties文件的方法
    Jquery简单使用
    JSP中request获取值
    MYSQL修改字段
    配置文件读取
    spring注解
    Route@简单应用
    MVC客户端验证的小示例
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/11964541.html
Copyright © 2011-2022 走看看