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

    1、获取类对象:

    1) Animal animal = new Animal();

      Class c1 = animal.getClass();

      System.out.println("getClass:" + c1.getName());

    2) Class c2 = Animal.class;

      System.out.println("class:" + c2);

    3) Class c3 = Class.forName("reflect.Animal");

      System.out.println("forName:" + c3);

    ====================

    构造方法:

    //1.加载Class对象
    Class clazz = Class.forName("fanshe.Student");

    //2.获取所有公有构造方法
    System.out.println("**********************所有公有构造方法*********************************");
    Constructor[] conArray = clazz.getConstructors();
    for(Constructor c : conArray){
    System.out.println(c);
    }

    System.out.println("************所有的构造方法(包括:私有、受保护、默认、公有)***************");
    conArray = clazz.getDeclaredConstructors();
    for(Constructor c : conArray){
    System.out.println(c);
    }

    System.out.println("*****************获取公有、无参的构造方法*******************************");
    Constructor con = clazz.getConstructor(null);
    //1>、因为是无参的构造方法所以类型是一个null,不写也可以:这里需要的是一个参数的类型,切记是类型
    //2>、返回的是描述这个无参构造函数的类对象。

    成员变量:

    1.批量的:
    Field[] getFields():获取所有的"公有字段" *
    Field[] getDeclaredFields():获取所有字段,包括:私有、受保护、默认、公有;
    2.获取单个的:
    public Field getField(String fieldName):获取某个"公有的"字段
    public Field getDeclaredField(String fieldName):获取某个字段(可以是私有的)

    成员方法:

    1.批量的:
    public Method[] getMethods():获取所有"公有方法";(包含了父类的方法也包含Object类)
    public Method[] getDeclaredMethods():获取所有的成员方法,包括私有的(不包括继承的)

    2.获取单个的:
    public Method getMethod(String name,Class<?>... parameterTypes):
    public Method getDeclaredMethod(String name,Class<?>... parameterTypes)


    反射方法的其它使用之---通过反射越过泛型检查:
    泛型用在编译期,编译过后泛型擦除(消失掉)。所以是可以通过反射越过泛型检查的

    ArrayList<String> strList = new ArrayList<String>();
    Class listClass = strList.getClass();
    Method m = listClass.getMethod("add", Object.class);
    m.invoke(strList, 100);

    ----------------------------------------------------------------

    eg:

      Class cc = Animal.class;
      // Class cc = Class.forName("reflect.Animal");
    try {
       Object object = cc.newInstance();
      // 反射操作方法,方法名、参数类型
      Method hello = cc.getMethod("hello", String.class);
      hello.invoke(object, "csk");
      System.out.println("===============");
      // 反射操作属性,属性名称
      Field nameField = cc.getDeclaredField("name");
      // 暴力反射,解除私有限定
      nameField.setAccessible(true);
      nameField.set(object, "csk");
      System.out.println("name=" + nameField.get(object));

    } catch (Exception e) {
      e.printStackTrace();
    }

  • 相关阅读:
    pycharm的常规使用
    python-引用/模块
    6-4 函数
    5-21文件的操作
    5-21python数据类型
    python-基础
    5-7接口测试工具之jmeter的使用
    接口测试基础
    把命令结果作为变量赋值
    shell变量子串
  • 原文地址:https://www.cnblogs.com/csk-1/p/9764720.html
Copyright © 2011-2022 走看看