zoukankan      html  css  js  c++  java
  • 反射

    1获取Class对象,及其方法

    1 Class<?> clazz = String.class;
    2 clazz = Class.forName("java.lang.String");
    3 clazz = new String().getClass();
    4         
    5 System.out.println(Integer.class==int.class);//false
    6 System.out.println(Integer.TYPE==int.class);//true
    7 int.class.isPrimitive();//判断字节码对象是否是原始类型
    8 int[].class.isArray();////判断字节码对象是否是数组类型

    2通过Class对象操作其构造方法

    1 Constructor<?> constructor = clazz.getConstructor(StringBuilder.class);
    2 String str = (String) constructor.newInstance(new StringBuilder("xdfgggfg"));

    3通过Class对象操作其成员变量

     1 clazz = ReflectPoint.class;
     2 Field fieldX = clazz.getField("x");//获取成员字段对象
     3 Field fieldY = clazz.getDeclaredField("y");//获取私有成员字段对象必须用此方法
     4         
     5 ReflectPoint obj = new ReflectPoint(3,6);
     6         
     7 int x = (Integer) fieldX.get(obj);//获取成员字段的值
     8         
     9 fieldY.setAccessible(true);//获取私有成员字段的值,先获取访问权限
    10 int y  = (Integer) fieldY.get(obj);
    11         
    12 System.out.println(fieldY.getType()==int.class);//获取字段的类型

     4数组的反射相关知识点

    int[] a1 = new int[3];
    int[] a2 = new int[4];
            
    String[] a3 = new String[3];
            System.out.println(a1.getClass().getSuperclass().getName());//java.lang.Object
    System.out.println(a1.getClass()==a2.getClass());//true,纬度和类型相同,则其class对象相同
            
    Object[] objs1 = a1; //int类型不是Object,不可转为Object数组
    Object[] objs2 = a3; 
            
    Arrays.asList(a1);//不会将a1拆开,因a1不可转为Object数组
    Arrays.asList(a3);//会将a1拆开
            
    Array.getLength(new int[5]);//获取数组的长度
    Array.get(new int[5], 2);//获取数组某个索引位置的值

    5通过class对象操作方法

    1 clazz = String.class;
    2 Method charAtMethod = clazz.getMethod("charAt", int.class);//获取成员方法对象
    3         
    4 charAtMethod.invoke("asdfgjfjo", 2);//静态方法第一参数传null
  • 相关阅读:
    通过XmlHttpRequest实现带进度条异步下载文件
    关于SharpZipLib压缩分散的文件及整理文件夹的方法
    最大尺寸限制的容器,根据内容显示滑条的计算问题
    页面localStorage用作数据缓存的简易封装
    基于jquery封装的颜色下拉选择框
    模仿win10样式,基于jquery的时间控件
    js对象的继承以及公有私有属性的定义和读写
    The remote name could not be resolved问题的解决方法
    vs快捷方式
    C++STL中的全排列函数
  • 原文地址:https://www.cnblogs.com/cyhj/p/4621324.html
Copyright © 2011-2022 走看看