zoukankan      html  css  js  c++  java
  • 笔记整理:反射

        反射
            反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,容许程序在运行时加载、探知、使用编译期间未知的class。即java的反射机制可以加载一个运行时才得知名称的class,获得其完整结构。
    (反射就是运行时可以得到某个对象的所有信息,包括方法,类型,属性,方法参数,方法返回值以及可以调用该类的所有方法。)
            在程序运行期间,java运行时系统始终为所有对象维护一个被称为运行时的类型标识。
            获取类的Class对象的方法:
            

    调用getClass()

    Object类中的getClass()方法返回一个Class类型的实例)

    Boolean var1 = true;Class<?> classType2 = var1.getClass();System.out.println(classType2);输出:class java.lang.Boolean 

    运用T.class 语法

    (T是任意的Java类型)

    Class<?> classType4 = Boolean.class;System.out.println(classType4);输出:class java.lang.Boolean 

    运用static method Class.forName()

    (使用时应该提供异常处理器)

    Class<?> classType5 = Class.forName("java.lang.Boolean");System.out.println(classType5);输出:class java.lang.Boolean 

    运用primitive wrapper classesTYPE 语法

    (这里返回的是原生类型,和Boolean.class返回的不同)

    Class<?> classType3 = Boolean.TYPE;System.out.println(classType3);输出:boolean 




    反射的应用
    1:通过反射获取构造方法并使用
    //获取字节码文件对象
    Class c = Class.forName("cn.itcast.Person");

    //获取构造器对象
    Constructor con = c.getDeclaredConstructor(String.class,int.class);

    //通过构造器对象获取Person对象
    Object obj = con.newInstance("刘意",29);

    2:通过反射获取成员变量并使用
    //获取字节码文件对象
    Class c = Class.forName("cn.itcast.Person");

    //获取构造器对象
    Constructor con = c.getDeclaredConstructor(String.class,int.class);

    //通过构造器对象获取Person对象
    Object obj = con.newInstance("刘意",29);


    //获取成员变量
    Field field = c.getDeclaredField("name");
    field.setAccessible(true);
    field.set(obj,"刘大意");



    3:通过反射获取成员方法并使用
    //获取字节码文件对象
    Class c = Class.forName("cn.itcast.Person");

    //获取构造器对象
    Constructor con = c.getDeclaredConstructor(String.class,int.class);

    //通过构造器对象获取Person对象
    Object obj = con.newInstance("刘意",29);

    //获取所有公共方法对象,包括从父类继承的
    //(获取本类所有方法的时候,不包括从父类继承的)
    Method[] methods = c.getDeclaredMethods();
    for(Method m : methods){
    m.setAccessiable(true);
    m.invoke(obj, null);
    }

























  • 相关阅读:
    常见移动端兼容性问题
    FireFox和Safari兼容event.path
    ts, vconsle显示‘Unexpected strict mode reserved word’
    移动端H5 input输入完成后页面底部留白问题
    解决taro安装完成依旧无法识别taro命令
    jquery ajax 设置请求头header 参数
    [iOS]技巧集锦:UICollectionView在旋转屏幕后Cell中的约束不起作用或自动布局失效
    [iOS]技巧集锦:UICollectionView内容下沉64像素原因和解决方案
    [iOS]坑爹的ALAsset(Assets Library Framework)
    [原创]首次制作JQueryUI插件-Timeline时间轴
  • 原文地址:https://www.cnblogs.com/istarry/p/3ca80e75f68ad50dfed39f7c2788773f.html
Copyright © 2011-2022 走看看