JavaSE:反射机制 - Constructor类

反射机制 - 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("-------------------------------------------------");

 

posted @ 2021-06-16 10:11  Jasper2003  阅读(265)  评论(0编辑  收藏  举报