zoukankan      html  css  js  c++  java
  • 获取类类型

    //获得类类型的两种方式
          1、 Class cls1 = Role.class;
          2、  Class cls2 = Class.forName("yui.Role");

      注意第二种方式中,forName中的参数一定是完整的类名(包名+类名),并且这个方法需要捕获异常。

      现在得到cls1就可以创建一个Role类的实例了,利用Class的newInstance方法相当于调用类的默认的构造器

      Object o = cls1.newInstance(); //创建一个实例 

          //Object o1 = new Role();   //与上面的方法等价

      这样就创建了一个对象,缺点是我们只能利用默认构造函数,因为Class的newInstance是不接受参数的,后面会讲到可接受参数的newInstance

      第二,如果类的构造函数是private的,比如Class,我们仍旧不能实例化其对象。

      首先介绍一下Constructor类,这个类用来封装反射得到的构造器,Class有四个方法来获得Constructor对象

      public Constructor<?>[] getConstructors()      返回类中所有的public构造器集合,默认构造器的下标为0

      public Constructor<T> getConstructor(Class<?>... parameterTypes)   返回指定public构造器,参数为构造器参数类型集合

      public Constructor<?>[] getDeclaredConstructors()  返回类中所有的构造器,包括私有

      public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回任意指定的构造器

      从名字来看,还是很好懂的,带上Declared的都是获得所有的构造方法,包括私有

      //指定参数列表获取特定的方法  
          Constructor con = cls1.getDeclaredConstructor(new Class[]{String.class}); //获取含有只有一个String
          con.setAccessible(true); //设置可访问的权限  
          Object obj = con.newInstance(new Object[]{"liyang"}); //注意这里Constructor的newInstance方法就可以设置参数了
          System.out.println(obj);  //打印一下这个对象的信息

      public Field getDeclaredField(String name)  获取任意指定名字的成员
      public Field[] getDeclaredFields()             获取所有的成员变量
      public Field getField(String name)           获取任意public成员变量
      public Field[] getFields()                          获取所有的public成员变量

      其他的非构造方法获取也是类似的

  • 相关阅读:
    博客园
    未释放的已删除文件
    ssh连接缓慢
    剑指 Offer 38. 字符串的排列
    剑指 Offer 37. 序列化二叉树
    剑指 Offer 50. 第一个只出现一次的字符
    剑指 Offer 36. 二叉搜索树与双向链表
    剑指 Offer 35. 复杂链表的复制
    剑指 Offer 34. 二叉树中和为某一值的路径
    剑指 Offer 33. 二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/qiyongliang/p/3837385.html
Copyright © 2011-2022 走看看