1 package 反射;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.InvocationTargetException;
5
6 class A{
7 private String name;
8 private int age;
9 public A(String name,int age){
10 System.out.println("调用有参构造实例化对象。");
11 this.name=name;
12 this.age=age;
13 }
14 @Override
15 public String toString() {
16 return "调用toString()方法:name="+name+",age="+age;
17 }
18 }
19 public class Test反射 {
20 public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
21 Class<?> cls=null;
22 try {
23 cls=Class.forName("反射.A");
24 } catch (ClassNotFoundException e) {
25 e.printStackTrace();
26 }
27 Object o=null;
28 try {
29 Constructor<?> con=cls.getConstructor(String.class,int.class);
30 o=con.newInstance("张三",18);//从此处可以看出以后定义类的构造方法时最好保留一个无参构造。
31 } catch (InstantiationException e) {
32 e.printStackTrace();
33 } catch (IllegalAccessException e) {
34 e.printStackTrace();
35 }
36 System.out.println(o);
37 /**
38 * 运行结果:
39 * 调用有参构造实例化对象。
40 * 调用toString()方法:name=张三,age=18
41 */
42 }
43 }