Contents
23.2. 构造方法的反射¶
Test.java
package com.a57work;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
// 调用构造方法1
// new Person();
// 调用构造方法2
// new Person("hujianli",20, 113);
// // 调用构造方法1
// printConstructor(Person.class);
//
// //调用构造方法2
// printTwoInit(Person.class);
// // 访问所有的构造方法
// printAllMethod(Person.class);
// 访问所有的修饰符
printModifier(Person.class);
}
// 访问第一个构造方法
static void printConstructor(Class cls) {
try {
Constructor c1 = cls.getConstructor(null);
System.out.println(c1);
c1.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
// 访问第二个构造方法
static void printTwoInit(Class cls) {
try {
Constructor c2 = cls.getConstructor(String.class, int.class, int.class);
System.out.println(c2);
c2.newInstance("hujianli", 20, 113);
} catch (Exception e) {
e.printStackTrace();
}
}
// 访问所有的构造方法
static void printAllMethod(Class cls) {
Constructor[] cs = cls.getDeclaredConstructors();
for (Constructor c : cs) {
System.out.println(c);
}
}
// 访问修饰符
static void printModifier(Class cls) {
Constructor[] cs = cls.getDeclaredConstructors();
for (Constructor c : cs) {
System.out.print("修饰符:");
System.out.println(Modifier.toString(c.getModifiers()));
System.out.print("构造名称:");
System.out.println(c.getName());
System.out.print("参数:");
Class[] array2 = c.getParameterTypes();
for (Class c1 : array2) {
System.out.print(c1.getName() + " ");
}
}
}
class Person {
private String name;
private int age;
private int pid;
// 构造方法1
private Person() {
System.out.println("Person1!.....");
}
//构造方法2
public Person(String name, int age, int pid) {
this.name = name;
this.age = age;
this.pid = pid;
System.out.println("Person2!.....");
}
}
}