java通過字節對象可以獲取class類中的構造函數,以下三種分別爲獲取無參的構造函數、公有的構造函數和私有的構造函數。
people對象的代碼如下:
public class People {
private String name;
private String sex;
private int age;
public People(){
System.out.println("構造方法被調用了啊!");
}
public People(String name){
this.name=name;
System.out.println("構造方法被調用了啊!+String");
}
public People(int age){
this.age=age;
System.out.println("構造方法被調用了啊!+int");
}
private People(String name,String sex){
this.name=name;
this.sex=sex;
System.out.println("構造方法被調用了啊!+name +sex");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
獲取構造函數的方法如下:
public class ConstructorGetDemo {
/**
* 獲取無參數的構造函數
*/
@Test
public void test1() throws Exception{
//通過類獲取class對象
Class clazz1= Class.forName("com.wzd.tool.People");
//獲取只有一個無參的構造器
Constructor<People> constructor=clazz1.getConstructor(null);
//實例化構造器
People people=constructor.newInstance();
//打印people對象的名字
System.out.println(people.getName());
}
/**
* 獲取有參的共有的構造函數
*/
@Test
public void test2() throws Exception{
//通過類獲取class對象
Class<People> clazz1=People.class;
//獲取只有一個String參數的構造器
Constructor<People> constructor=clazz1.getConstructor(String.class);
//傳入String值實例化構造器
People people=constructor.newInstance("張三");
//打印people對象的名字
System.out.println(people.getName());
}
/**
* 獲取私有的構造函數
*/
@Test
public void test3() throws Exception{
//通過類獲取class對象
Class<People> clazz1=People.class;
//獲取只有一個String參數的構造器
Constructor<People> constructor=clazz1.getDeclaredConstructor(String.class,String.class);
//設置可以訪問私有的構造函數
constructor.setAccessible(true);
//傳入String值實例化構造器
People people=constructor.newInstance("張三","男");
//打印people對象的名字
System.out.println("姓名:"+people.getName());
System.out.println("性別:"+people.getSex());
}
}