创建一个Student类
public class Student {
public String name;
public Student() {
}
public Student(String name) {
this.name =name;
}
public void doHomework() {
System.out.println(name+"正在写作业。。。");
}
}
1.如何获取构造方法:
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
Class clazz =null;
clazz = Student.class; //获取Student类实例
try {
Constructor constructor = clazz.getConstructor(); //返回Student类的构造方法,存入constructor 中
System.out.println(constructor.getName());
} catch (Exception e1) {
e1.printStackTrace();
}
try {
Constructor constructor1 = clazz.getConstructor(String.class); //有参构造方法
System.out.println(constructor1.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是.getConstructor();只适用于Student类中的public方法。如果构造方法是private,则用
.getDeclaredConstructor();
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
Class clazz =null;
clazz = Student.class; //获取Student类实例
try {
Constructor constructor1 = clazz.getDeclaredConstructor(String.class);
System.out.println(constructor1.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.如何获取构造方法的信息
通过Constructor类某些方法可以获取某个构造方法的信息,这些方法如下:
①返回Class对象
getDeclaringClass():返回声明Constructor对象对应构造方法的类的Class对象。
②返回int类型
getModifiers():以整数形式返回Constructor对象表示的构造函数的修饰符。
③返回String类型 getName() :以字符串形式返回Constructor对象所表示得构造方法的名称。
④返回Class<?>[] 数组 getParameterTypes():返回由Constructor对象所表示的构造方法的形参类型 对应Class对象 组成的数组 如果构造方法没有参数,则数组长度为0。
只有Student类中都是public才可以用
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
Class clazz =null;
clazz = Student.class; //获取Student类实例
try {
Constructor constructor = clazz.getDeclaredConstructor(String.class); //获取构造方法
clazz = constructor.getDeclaringClass();
System.out.println(clazz.getName());
int mod = constructor.getModifiers();
String str = Modifier.toString(mod);
System.out.println(str);
System.out.println(constructor.getName());
Class<?>[] clazzs= constructor.getParameterTypes();
for(Class zz : clazzs) {
System.out.println(zz.getName());
}
}catch (Exception e1) {
e1.printStackTrace();
}
}
}
运行结果
3.使用该构造方法
①通过Constructor类某些方法可以创建对象,这些方法如下:
void setAccessible(boolean flag):调用构造函数时是否忽略访问权限的影响,true表示忽略,false表示不忽略。
②constructor.newInstance(Object… initargs):使用此Constructor对象表示的构造方法 来创建声明该构造方法类的新对象。initargs为传入该构造方法中的参数,如果该构造方法没有参数,则可设定为null或一个长度为0的数组。
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) {
Class clazz =null;
clazz = Student.class; //获取Student类实例
try {
Constructor constructor = clazz.getDeclaredConstructor(String.class);
constructor.setAccessible(true); //忽略访问权限
Object object = constructor.newInstance("tom"); //创建新对象 ,返回一个Object类型的对象
Student stu = (Student)object; //创建了stu对象,可以调用方法
stu.doHomework();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}