package ClassTest;
/*
* 創建一個類,兩個構造器。一個帶參。一個無參,三個屬性
* 測試反射,調用反射創建類實例
*/
public class UserPo {
private int id;
private String name;
private String pw;
/*無參構造器*/
public UserPo() {
super();
}
/*有參構造器*/
public UserPo(int id, String name, String pw) {
super();
this.id = id;
this.name = name;
this.pw = pw;
}
/*封裝屬性*/
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
}
public class UserPoTest {
public static void main(String[] args) {
/* 獲取UserPo的類對象的Class對象 */
Class<?> userPoClass = null;
try {
/**
* 實例化對象演示
*/
userPoClass = Class.forName("ClassTest.UserPo");
/* 調用Class類的方法newInstance實例化對象,類型轉換 */
UserPo uerPo = (UserPo) userPoClass.newInstance();
/* 調用class對象獲取構造器對象,調用構造器對象newInstance實例化對象 */
Constructor<?> userPoconstructor = userPoClass.getConstructor(int.class, String.class, String.class);
/* 調用構造器對象創建實例 */
UserPo uerPoConstructorClass = (UserPo) userPoconstructor.newInstance(12, "name", "id");
/* 調用構造器返回類的修飾符 */
String string = Modifier.toString(userPoconstructor.getModifiers());
/**
* Field類方法演示
* 方法:getModifiers(),返回int屬性的修飾符的代表數字
* 方法:getType(),返回屬性類型的Class對象
*/
/*
* 調用Class類方法getFields(),返回屬性類數組(共有屬性), getDeclaredFields(),返回類聲明的屬性數組
*/
Field[] userFields = userPoClass.getDeclaredFields();
for (Field e : userFields) {
/* Fields類的方法getName()方法,返回屬性的名字字符串 */
if (e.getName() == "id") {
/* Field對象的方法getType(),獲取屬性的類型,返回值是Class對象 */
Class<?> Eclass = e.getType();
/* 調用Class方法打印屬性的類名字 */
System.out.println(Eclass.getSimpleName());
/* 獲取屬性的修飾符,並利用Modifier的toString轉換爲String */
String EModifier = Modifier.toString(e.getModifiers());
System.out.println(EModifier);
/* 獲取屬性權限,類中定義的是private類 */
e.setAccessible(true);
/* 獲取實例類中的屬性的值 */
e.get(uerPoConstructorClass);
System.out.println(e.get(uerPoConstructorClass));
/* 設置屬性值 */
e.set(uerPoConstructorClass, 23);
System.out.println(e.get(uerPoConstructorClass));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
反射之Field類常用方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.