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);
    }

























  • 相关阅读:
    [收藏]利用ASP.NET技术动态生成HTML页面
    [收藏]为DataGrid添加CheckBox控件
    Html代码中table跨2行和跨2列的用法
    常用的匹配正则表达式和实例
    一个在DotNet下和Java下都通用的加密类!
    如何动态加载js文件?
    多个域下共享Cookie的实现
    [收藏]2进制、8进制、10进制、16进制...各种进制间的轻松转换(c#)
    [总结]取得Web程序和非Web程序的根目录的N种取法(C#)
    MSN错误代码(error coed)解决大全
  • 原文地址:https://www.cnblogs.com/istarry/p/3ca80e75f68ad50dfed39f7c2788773f.html
Copyright © 2011-2022 走看看