获取构造方法必须借助于Class类的实例化对象,所以我们首先复习一下如何将class类对象实例化。
获取class类对象实例化的六种方法
获取构造方法的方法有4种,虽然结构形式上很相似,但是也有不同之处,下面先将四种方法列上:
public class Student {
public String name ;
public Student() {
}
public Student(String name) {
this.name = name ;
}
public void dohomework(String name) {
System.out.println(name+"正在做作业......");
}
}
方法一:返回该Class对象表示类包含的所有public构造方法(不含继承)所对应Constructor对象数组。
public class Test{
public static void main(string[] args){
Class clazz = Student.class;//
try {
Constructor constructor =clazz.getConstructor();//获取构造方法
System.out.println(constructor.getName());//构造方法调用.getName,并输出。
} catch (Exception e) {
e.printStackTrace();
}
}
}
方法二:返回与该Class对象表示类中参数列表相匹配的public构造函数(不含继承)对应的Constructor对象。
public class Test{
public static void main(string[] args){
Class clazz = Student.class;//
try {
Constructor constructor =clazz.getConstructor(String.class);//此时获取的构造方法,是对应参数列表相匹配的构造方法。
System.out.println(constructor.getName());//构造方法调用.getName,并输出。
} catch (Exception e) {
e.printStackTrace();
}
}
}
方法三:返回一个该Class对象表示类中声明的所有构造方法(不区分访问权限)对应的Constructor对象数组。
public class Test{
public static void main(string[] args){
Class clazz = Student.class;//
try {
Constructor constructor =clazz.getDeclaredConstructors();//此时获取的构造方法,无视访问权限,是对应参数列表相匹配的构造方法。
System.out.println(constructor.getName());//构造方法调用.getName,并输出。
} catch (Exception e) {
e.printStackTrace();
}
}
}
方法四:返回与该Class对象表示类中定义的形参类型相匹配的构造方法(不区分访问权限)的Constructor对象。
public class Test{
public static void main(string[] args){
Class clazz = Student.class;//
try {
Constructor constructor =clazz.getDeclaredConstructors(String.class);//此时获取的构造方法,无视访问权限,是对应参数列表相匹配的构造方法。
System.out.println(constructor.getName());//构造方法调用.getName,并输出。
} catch (Exception e) {
e.printStackTrace();
}
}
}
获取构造方法信息:
public class Test{
public static void main(string[] args){
Class clazz = Student.class;//
try {
Constructor constructor =clazz.getConstructor(String.class);//获取构造方法
System.out.println(constructor.getDeclaringClass());//获取构造方法的类的class对象
String result =Modifier.toString(constructor.getModifiers());//获取构造方法的修饰符
System.out.println(result);
System.out.println(constructor.getName());
Class[] var =constructor.getParameterTypes();
for (Class ss : var) {
System.out.println(ss);//获取由Constructor对象所表示的构造方法的形参类型对应Class对象组成的数组此
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果如下:
创建对象:
newInstance(Object... initargs):使用此Constructor对象表示的构造方法来创建声明该构造方法类的新对象。initargs为传入该构造方法中的参数,如果该构造方法没有参数,则可设定为null或一个长度为0的数组。
setAccessible(boolean flag):调用构造函数时是否忽略访问权限的影响,true表示忽略,false表示不忽略。
public class Test{
public static void main(string[] args){
Class clazz = Student.class;//
try {
Constructor constructor =clazz.getConstructor(String.class);
constructor.setAccessible(true);//无视访问权限,通过Boolean来控制。
Object object = constructor.newInstance("Jim");
Student student = (Student)object;
student.doHomework();
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出如下结果.