首先定义一个教员类,如下:
//教员类
public class AccpTeacher {
private String name;
private int age;
public AccpTeacher() {
name = "无名氏";
age = 22;
}
public AccpTeacher(String name) {
this.name = name;
this.age = 22;
}
public String toString() {
return "名字是:" + name;
}
public String toString(int age, String name) {
this.name = name;
this.age = age;
return "名字是:" + name + ";年龄是:" + age;
}
}
public class AccpTeacher {
private String name;
private int age;
public AccpTeacher() {
name = "无名氏";
age = 22;
}
public AccpTeacher(String name) {
this.name = name;
this.age = 22;
}
public String toString() {
return "名字是:" + name;
}
public String toString(int age, String name) {
this.name = name;
this.age = age;
return "名字是:" + name + ";年龄是:" + age;
}
}
如果我们实例化这个类可以用我们常用的如下方式:
public static void main(String[] args){
AccpTeacher accpTeacher = new AccpTeacher();
System.out.println(accpTeacher);
}
可以清晰的想到运行结果是:
名字是:无名氏
AccpTeacher accpTeacher = new AccpTeacher();
System.out.println(accpTeacher);
}
以上是我们最常用的方式,但有时我们想通过字符串来实例化一个类如何做呢,看下面代码:
public static void main(String[] args){
// 实例化一个类
Object accpTeacher = Class.forName(AccpTeacher.class.getName()).newInstance();
System.out.println(accpTeacher);
}
运行结果同样是:
名字是:无名氏
// 实例化一个类
Object accpTeacher = Class.forName(AccpTeacher.class.getName()).newInstance();
System.out.println(accpTeacher);
}
首先Class.forName(类名)是将这个类加载到JVM虚拟机中,获得一个类型为Class的类,然后调用其newInstance()方法,相当于实例化(调用无参的构造函数);所以以上两段代码的运行效果是一致的。
我们看到AccpTeacher这个类有一个带参数的构造方法,那如何通过反射来调用它呢?看下面代码:
public static void main(String[] args){
// 通过构造方法实例化一个类;本例是一个有参数的构造函数,并且构造函数可以为private修饰
Class[] argtype = new Class[] { String.class };//代表构造方法的参数类型数组
Object[] argparam = new Object[] { "张三" };//代表构造方法的参数值数组
Class classType = Class.forName(AccpTeacher.class.getName());
Constructor constructor = classType.getDeclaredConstructor(argtype); //获得构造方法,argtype是参数类型数组,我们这里代表的是参数只有一个String类型
constructor.setAccessible(true);// 访问私有构造函数,Spring可以配置私有的属性和方法,其实就是用到的这里
Object accpTeacher2 = constructor.newInstance(argparam);
System.out.println(accpTeacher2);
}
// 通过构造方法实例化一个类;本例是一个有参数的构造函数,并且构造函数可以为private修饰
Class[] argtype = new Class[] { String.class };//代表构造方法的参数类型数组
Object[] argparam = new Object[] { "张三" };//代表构造方法的参数值数组
Class classType = Class.forName(AccpTeacher.class.getName());
Constructor constructor = classType.getDeclaredConstructor(argtype); //获得构造方法,argtype是参数类型数组,我们这里代表的是参数只有一个String类型
constructor.setAccessible(true);// 访问私有构造函数,Spring可以配置私有的属性和方法,其实就是用到的这里
Object accpTeacher2 = constructor.newInstance(argparam);
System.out.println(accpTeacher2);
}
原文地址:http://blog.sina.com.cn/s/blog_754c6dff0100s81d.html