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