zoukankan      html  css  js  c++  java
  • java反射使用总结

    java反射使用总结

    获取类对象

    (1)【Source源代码阶段】 Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
    多用于配置文件,将类名定义在配置文件中。读取文件,加载类。
    (2)【Class类对象阶段】 类名.class:通过类名的属性class获取
    多用于参数的传递
    (3)【Runtime运行时阶段】对象.getClass():getClass()方法是定义在Objec类中的方法
    多用于对象的获取字节码的方式
    注意:同一个字节码文件在一次程序运行过程中,只会被加载一次,无论通过哪一种方式获取的Class对象都是同一个。
    代码如下所示:

    //方法一:Class.forName("全类名")
    Class cl1 = Class.forName("cn.buptleida.database.RedisDB");
    System.out.println(cl1);
    
    //方法二:类名.class
    Class cl2 = RedisDB.class;
    System.out.println(cl2);
    
    //方法三:对象.getClass()
    RedisDB obj = new RedisDB();
    Class cl3 = obj.getClass();
    System.out.println(cl3);
    

    成员变量方法

    获取

    Class cl = SDS.class;
    //根据变量名称获取成员变量Field对象,只允许public修饰的变量
    Field field = cl.getField("len");
    
    //获取所有public修饰的成员变量
    Field[] fields = cl.getFields();
    
    //根据名称获取成员变量,不考虑修饰符
    Field declaredField = cl.getDeclaredField("len");
    
    //获取所有成员变量,不考虑修饰符
    Field[] declaredFields = cl.getDeclaredFields();
    

    使用

    //需要传入一个实例化的对象
    SDS sds = new SDS(new char[]{'h','e','l','l','o'});
    
    //暴力反射,忽略访问控制权限
    declaredField.setAccessible(true);
    
    //获取成员变量的值
    Object o = declaredField.get(sds);
    
    //设置成员变量的值
    declaredField.set(sds,6);
    

    构造方法

    获取

    Constructor constructor = cl.getConstructor(char[].class, int.class);
    Constructor[] constructors = cl.getConstructors();
    
    Constructor declaredConstructor = cl.getDeclaredConstructor(char[].class, int.class);
    Constructor[] declaredConstructors = cl.getDeclaredConstructors();
    

    使用

    空参构造方法

    //方法一
    Constructor constructor = cl.getConstructor();
    Object objSds = constructor.newInstance();
    //方法二
    Object objSds = cl.newInstance();
    

    非空参构造方法

    Constructor constructor = cl.getConstructor(char[].class, int.class);
    Object objSds = constructor.newInstance(new char[]{'h', 'e', 'l', 'l', 'o'},10);
    

    方法对象

    获取

    Method method = cl.getMethod("getBuf");
    
    Method[] methods = cl.getMethods();
    
    //方法如果带参数,则写上参数列表
    Method declaredMethod = cl.getDeclaredMethod("makeRoom", int.class);
    
    Method[] declaredMethods = cl.getDeclaredMethods();
    

    使用

    //需要传入一个实例化的对象
    SDS str = new SDS(new char[]{'h', 'e', 'l', 'l', 'o'});
    method.invoke(str);
    
    declaredMethod.setAccessible(true);
    declaredMethod.invoke(str,3);
    

    其它

    getName方法

    String name1 = declaredField.getName();
    String name2 = constructor.getName();//返回全类名
    String name3 = declaredMethod.getName();
    String name4 = cl.getName();//返回全类名
    
  • 相关阅读:
    clearInterval,setInterval,clearTimeout,setTimeout
    input的onkeyup效果 超级简短代码
    yourphp点击刷新验证码
    收藏的插件
    js创建和获取cookie
    js blind使用
    js控制网页滚动条往下滚动
    document.body.scrollTop用法
    yourphp问题中心
    yourphp数据库介绍
  • 原文地址:https://www.cnblogs.com/buptleida/p/13331090.html
Copyright © 2011-2022 走看看