zoukankan      html  css  js  c++  java
  • JavaSE:反射机制

    反射机制 - Constructor类

    1.  基本概念

        java.lang.reflect.Constructor类:主要用于描述获取到的构造方法信息

    2.  Class类中,与Constructor类有关的常用方法

    Constructor getConstructor(Class<?>... parameterTypes) 用于获取此Class对象所表示类型中,参数指定的公共构造方法
    Constructor<?>[] getConstructors()  用于获取此Class对象所表示类型中,所有的公共构造方法

    3.  Constructor类的常用方法

    T newInstance(Object... initargs ) 使用此Constructor对象描述的构造方法,来构造Class对象代表类型的新实例
    int getModifiers() 获取方法的访问修饰符
    String getName() 获取方法的名称
    Class<?>[] getParameterTypes() 获取方法所有参数的类型

    4.  代码示例

      1 //  (假设已存在一个 Person.java 类  )
      2 
      3 class PersonConstructorTest {
      4 
      5     main() throws Exception {
      6 
      7       
      8 
      9       //  1.  使用原始方式,以无参形式,构造Person类型的对象,并打印
     10 
     11       Person p1 = new Person();
     12 
     13       print(“无参方式创建的对象是:” + p1);  //  null  0
     14 
     15  
     16 
     17       //  2.  使用反射机制,以无参形式,构造Person类型的对象,并打印
     18 
     19       //  创建对象的类型,可以从键盘输入
     20 
     21       //  print("请输入要创建对象的类型:");
     22 
     23       //  Scanner sc = new Scanner (System.in);
     24 
     25       //  String str1 = sc.next();
     26 
     27       //  Class c1 = Class.forName("com.lagou.task20.Person");
     28 
     29  
     30 
     31       //  创建对象的类型,可以从配置文件中读取
     32 
     33       BufferedReader br = new BufferedReader (new InputStreamReader(new FileInputStream("d:/a.txt ")));
     34 
     35       String str1 = br.readLine();
     36 
     37       Class c1 = Class.forName(str1);
     38 
     39       //  print("无参方式创建的对象是:" + c1.newInstance() );  //  null  0
     40 
     41       //  获取Class对象对应类中的无参构造方法,也就是Person类中的无参构造方法
     42 
     43       Constructor constructor = c1.getConstructor();
     44 
     45       //  使用获取到的无参构造方法,来构造对应类型的对象,也就是Person类型的对象
     46 
     47       print("无参方式创建的对象是:" + constructor.newInstance() );
     48 
     49       //  sc.close();
     50 
     51       br.close();
     52 
     53  
     54 
     55       //  3.使用原始方式,以有参方式,构造Person类型的对象,并打印
     56 
     57       Person p2 = new Person("zhangfei",30);
     58 
     59       print("有参方式构造的对象是:" + p2);   //  zhangfei  30
     60 
     61       
     62 
     63       //  4.使用反射机制,以有参方式,构造Person类型的对象,并打印
     64 
     65       //  获取Class对象对应类中的有参构造方法,也就是Person类中的有参构造方法
     66 
     67       Constructor constructor1 = c1.getConstructor(String.class, int.class);
     68 
     69       //  使用获取到的有参构造方法,来构造对应类型的对象,也就是Person类型的对象
     70 
     71       //  newInstance方法中的实参,是用于给有参构造方法的形参进行初始化的,也就是给name和age进行初始化的
     72 
     73       print("有参构造的对象是:" + constructor1.newInstance("zhangfei",30));  //  zhangfei  30  
     74 
     75  
     76 
     77       //  5.  使用反射机制,获取Person类中,所有的公共构造方法,并打印
     78 
     79       Constructor[] constructors = c1.getConstructors();
     80 
     81       for (Constructor ct: constructors) {
     82 
     83         print("构造方法的访问修饰符是" + ct.getModifiers() );
     84 
     85         print("构造方法的方法名称是" + ct.getName() );
     86 
     87         Class[] parameterTypes = ct.getParameterTypes();
     88 
     89         print("构造方法的所有参数类型是:");
     90 
     91         for (Class cs : parameterTypes) {
     92 
     93           print(cs + " ");
     94 
     95         }
     96 
     97         println();
     98 
     99       } 
    100 
    101     }
    102 
    103 }

    <1>  无参方式,构造对象

     <2>  有参方式,构造对象

     

    <3>  使用getConstructors(), 得到类中的所有构造方法

     1 // 5.使用反射机制获取Person类中所有的公共构造方法并打印
     2         Constructor[] constructors = c1.getConstructors();
     3         for (Constructor ct : constructors) {
     4             System.out.println("构造方法的访问修饰符是:" + ct.getModifiers());
     5             System.out.println("构造方法的方法名称是:" + ct.getName());
     6             Class[] parameterTypes = ct.getParameterTypes();
     7             System.out.print("构造方法的所有参数类型是:");
     8             for (Class cs : parameterTypes) {
     9                 System.out.print(cs + " ");
    10             }
    11             System.out.println();
    12             System.out.println("-------------------------------------------------");
  • 相关阅读:
    apache安全—用户访问控制
    hdu 3232 Crossing Rivers 过河(数学期望)
    HDU 5418 Victor and World (可重复走的TSP问题,状压dp)
    UVA 11020 Efficient Solutions (BST,Splay树)
    UVA 11922 Permutation Transformer (Splay树)
    HYSBZ 1208 宠物收养所 (Splay树)
    HYSBZ 1503 郁闷的出纳员 (Splay树)
    HDU 5416 CRB and Tree (技巧)
    HDU 5414 CRB and String (字符串,模拟)
    HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/14888264.html
Copyright © 2011-2022 走看看