java反射中的构造方法
获取构造方法,创建对象。
package com.zm.bean;
public class Person {
private String name;
private int age;
private Person(String name){
this.name = name;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.zm.test;
import com.zm.bean.Person;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class DemoGetConstructor {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
// 1.获取字节码文件对象
Class<Person> pClass = (Class<Person>) Class.forName("com.zm.bean.Person");
// 2.获取构造方法
Constructor<Person> c1 = pClass.getConstructor();
// 3.通过构造方法创建对象
Person p = c1.newInstance();
System.out.println(p);
// 1.创建一个带有参数的构造方法
Constructor<Person> c2 = pClass.getConstructor(String.class, int.class);
// 2.创建一个对象,传入两个参数(参数如果不写,编译不报错,运行出错)
Person p2 = c2.newInstance("张三", 20);
System.out.println(p2);
// 1.获取所有权限的构造方法
Constructor<Person> c3 = pClass.getDeclaredConstructor(String.class);
// 2.设置忽略权限检查为ture
c3.setAccessible(true);
Person p3 = c3.newInstance("李四");
System.out.println(p3);
}
}
程序执行结果: