package com.bean;
import java.util.List;
public class PersonBean { public String name = "yzc";
public PersonBean() { System.out.println("无参构造方法"); }
public PersonBean(String name) { System.out.println("有参参数为name构造方法"); }
public PersonBean(String name, int age) { System.out.println("有参参数为name+age构造方法" + name); }
private PersonBean(List list) { System.out.println("有参参数为name构造方法"); }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
package com.test;
import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List;
import com.bean.PersonBean;
public class ClassPersion { //反射就是加载类 解刨出类的各个组成部分 public static void main(String[] args) throws Exception { getPerson(); getPerson1(); getPerson2(); test4(); getPerson5(); }
public static void getPerson() throws Exception { //反射的第一步 加载类 Class<?> clazz = Class.forName("com.bean.PersonBean"); //获取类里面的无参构造函数 Constructor<?> c = clazz.getConstructor(null); //new 对象 PersonBean person = (PersonBean) c.newInstance(null);
}
public static void getPerson1() throws Exception { //反射的第一步 加载类 Class<?> clazz = Class.forName("com.bean.PersonBean"); //获取类里面的String构造函数 Constructor<?> c = clazz.getConstructor(String.class); //new 对象 PersonBean person = (PersonBean) c.newInstance("aa"); System.out.println("1" + person.name); //打印结果 yzc }
public static void getPerson2() throws Exception { //反射的第一步 加载类 Class<?> clazz = Class.forName("com.bean.PersonBean"); //获取类里面的String构造函数 Constructor<?> c = clazz.getConstructor(String.class, int.class); //new 对象 PersonBean person = (PersonBean) c.newInstance("aa", 11); System.out.println("2" + person.name); //打印结果 yzc }
//调用私有的构造函数 public static void test4() throws Exception { Class clazz = Class.forName("com.bean.PersonBean"); //注意测试的这个构造函数是private的 //Constructor c = clazz.getConstructor(List.class);private的构造方法不能这样写,抛出NoSuchMethodException Constructor c = clazz.getDeclaredConstructor(List.class); //不管你的构造函数是什么访问权限,我强制给你打开这个访问权限 c.setAccessible(true);//暴力反射 注释这一行的话就不行,抛异常 PersonBean p = (PersonBean) c.newInstance(new ArrayList()); System.out.println(p.name); }
//调用无参构造函数 public static void getPerson5() throws Exception { //反射的第一步 加载类 Class<?> clazz = Class.forName("com.bean.PersonBean");
PersonBean person = (PersonBean) clazz.newInstance(); System.out.println("5" + person.name); //打印结果 yzc }
}
所有打印结果:
无参构造方法 有参参数为name构造方法 1yzc 有参参数为name+age构造方法aa 2yzc 有参参数为name构造方法 yzc 无参构造方法 5yzc