package com.mypractice.second;
public class MessageDemo {
private String name;
private int age;
public MessageDemo(){
name = "zhutianpeng";
age = 22;
}
public MessageDemo(String name){
this.name = name;
age = 22;
}
public MessageDemo(String name,int age){
this.name = name;
this.age = age;
}
public void getMessage(){
System.out.println("name:"+name+"\nage:"+age);
}
}
package com.mypractice.second;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class MessageDemoTest {
/**
* @param args
* @throws NoSuchMethodException
* @throws SecurityException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws IllegalArgumentException
*/
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
//使用无参构造函数,反射出对象
Class c = MessageDemo.class; //获取Class类
Constructor con = c.getConstructor(null); //获取无参构造函数
Object o = con.newInstance(); //并new一个新实例
MessageDemo o1 = (MessageDemo)o; //类型强制转换
o1.getMessage(); //打印信息
//使用有残构造函数反射对象
MessageDemo messageDemo = new MessageDemo();//创建该类对象
Class c1 = messageDemo.getClass(); //获取Class类
Constructor con1 = c1.getConstructor(String.class);//获取一个参数的构造函数
MessageDemo messageDemo1 = (MessageDemo)con1.newInstance("朱天鹏"); //根据获取的构造参数new一个新对象,并构造参数的值
messageDemo1.getMessage(); //打印信息
}
}
运行结果:
总结:
1获取Class类有两种方法:
①先new一个对象,并通过该对象的getClass()方法返回Class类;
②直接只用类名调用class(即类.class),返回Class类。
2.在调用无参构造函数时,必须传入null,不可不传值。
例如
Constructor con = c.getConstructor(null);