package run;
import org.junit.Test;
import java.lang.reflect.Constructor;
public class FileDemo {
@Test
public void getConstructors(){
Class c = Account.class;
Constructor[] con = c.getConstructors();//只能获取所以权限为public的构造器
for (Constructor constructor : con) {
System.out.println(constructor.getName() + "->" +constructor.getParameterCount());
}
}
@Test
public void getDeclaredConstructors(){
Class c = Account.class;
Constructor[] con1 = c.getDeclaredConstructors();//获取所有的构造器,包括权限为private的构造器
for (Constructor constructor : con1) {
System.out.println(constructor.getName() + "->" + constructor.getParameterCount());
}
}
@Test
public void getConstructor() throws Exception {
Class c = Account.class;
Constructor constructor = c.getConstructor(String.class,int.class);//根据参数获取构造器,只能获取权限为public
System.out.println(constructor.getName() + "->" +constructor.getParameterCount());
}
@Test
public void getDeclaredConstructor() throws Exception {
Class c = Account.class;
Constructor constructor1 = c.getDeclaredConstructor();//根据参数获取构造器,包括权限为private的构造器
System.out.println(constructor1.getName() + "->" +constructor1.getParameterCount());
}
@Test
public void newInstanceAndSetAccessible() throws Exception {
Class c = Account.class;
Constructor constructor = c.getConstructor(String.class,int.class);//根据参数获取构造器,只能获取权限为public
System.out.println(constructor.getName() + "->" +constructor.getParameterCount());
Constructor constructor1 = c.getDeclaredConstructor();//根据参数获取构造器,包括权限为private的构造器
System.out.println(constructor1.getName() + "->" +constructor1.getParameterCount());
Account acc = (Account) constructor.newInstance("孙悟空",100000);//根据指定的构造器创建对象
//如果想用private修饰的构造器的换话,需要对其进行暴力反射
constructor1.setAccessible(true);//打开权限 只是暂时打开,并不是永久打开
Account account = (Account) constructor1.newInstance();//根据指定的构造器创建对象
}
}
推荐使用
getDeclaredConstructors()
getDeclaredConstructor()