public class Person {
private String name ;//姓名
int age ;
public String address ;
//构造方法
//公共无参构造
public Person() {
}
//私有的带一个参数的构造方法
private Person(String name) {
this.name = name ;
}
//单两个参数的,默认修饰符的构造方法
Person(String name,int age){
this.name = name ;
this.age = age ;
}
//公共的带三个参数的构造方法
public Person(String name,int age,String address) {
this.name = name ;
this.age = age ;
this.address = address;
}
//提供一个成员方法
public void show() {
System.out.println("show Person...");
}
public String function() {
return "hello" ;
}
public String method(int num) {
return "JavaEE"+num ;
}
private void function2(String str) {
System.out.println(str);
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/*
* 使用反射获取构造方法:Constructor:构造器
*
* */
public class RelfectDemo {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
// 获取Person类的字节码文件对象Class
Class c1=Class.forName("com.lin_reflect_02.Person");
// 获取构造器对象的方法
// 获取所有的公共方法
// public Constructor<?>[] getConstructors():获取Person类中的所有的公共的方法
Constructor [] Constructors=c1.getConstructors();
for(Constructor con:Constructors) {
System.out.println(con);
}
System.out.println("------------------");
// public Constructor<T> getConstructor(Class<?>... parameterTypes)
// 获取指定的构造方法(公共的方法)
// JDK5提供:可变参数:权限修饰符 返回值类型 方法名(形参类型...参数名)
// 获取Person类中无参的构造方法
Constructor con=c1.getConstructor();//无参构造方法
System.out.println(c1);
// 通过无参构造方法创建这个类的实例
// public T newInstance(Object... initargs)
// 通过构造器的该方法创建该类的新实例
// 形式参数: 为传递的实际参数,没有参数就不需要写形参
Object obj=con.newInstance();//相当于Person p=new Person();
System.out.println(obj);//Person [name=null, age=0, address=null]--->相当于输出p
}
}