反射獲取構造器對象



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());
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章