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
  • 相关阅读:
    Java的三个基础排序算法(其余将在以后补充)
    Review PHP设计模式之——单例模式
    Mysql忘记密码,重新设置
    PHP加解密相关函数
    http返回状态代码及含义
    符合web标准的网页下拉菜单
    解决MySQL查询不区分大小写
    MYSQL Error 2006HY000:MySQL server has gone away的解决方案
    MySQL之count(*)与count(id)效率比较(转)
    如何让sudo命令不需要输入密码就可执行
  • 原文地址:https://www.cnblogs.com/cyhj/p/4621324.html
Copyright © 2011-2022 走看看