反射获取构造函数并调用。说再多不入代码来的快。我把代码分成了一块块代码区,需要看一个注释其他的就可以了,测试过都是可以的!
package FanShe;
import java.lang.reflect.*;
class Student {
//---------------构造方法-------------------
//(默认的构造方法)
Student(String str){
System.out.println("(默认)的构造方法 s = " + str);
}
//无参构造方法
public Student(){
System.out.println("调用了公有、无参构造方法执行了。。。");
}
//有一个参数的构造方法
public Student(char name){
System.out.println("姓名:" + name);
}
//有多个参数的构造方法
public Student(String name ,int age){
System.out.println("姓名:"+name+"年龄:"+ age);//这的执行效率有问题,以后解决。
}
//受保护的构造方法
protected Student(boolean n){
System.out.println("受保护的构造方法 n = " + n);
}
//私有构造方法
private Student(int age){
System.out.println("私有的构造方法 年龄:"+ age);
}
}
public class ConstructorDemo {
public static void main(String[] args) throws Exception {
// Class c=new Student().getClass();
Class c=Student.class;
// Class c=Class.forName("FanShe.Contructor");
//三种方法能获取学生类Class对象
/*System.out.println("*****获取公有构造方法*****");
Constructor[] cArr=c.getConstructors();
for(Constructor con:cArr) {
System.out.println(cor);
}*/
/*System.out.println("*****获取全部构造方法*****");
Constructor[] cArr=c.getDeclaredConstructors();
for(Constructor con:cArr) {
System.out.println(con);
}*/
/*System.out.println("*****获取公有无参构造方法*****");
Constructor con=c.getConstructor();
System.out.println(con);*/
/*System.out.println("*****获取指定参数构造方法*****");
Constructor con=c.getDeclaredConstructor(String.class);
System.out.println(con);*/
/*System.out.println("*****暴力访问,创建对象*****");
Constructor con=c.getDeclaredConstructor(String.class);
con.setAccessible(true);//暴力访问
Object obj=con.newInstance("傅靖耀");//new Student("傅")*/
}
}