package cn.itcast_03;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/*
* 通過發生獲取成員變數並使用
*/
public class ReflectDemo {
public static void main(String[] args) throws Exception {
// 獲取位元組碼檔案物件
Class c = Class.forName("cn.itcast_01.Person");
// 獲取公共(public修飾)的成員變數
// Field[] fields = c.getFields();
// 獲取所有的成員變數
// Field[] fields = c.getDeclaredFields();
// for (Field field : fields) {
// System.out.println(field);
// }
// 通過無參構造方法建立物件
Constructor con = c.getConstructor();
Object obj = con.newInstance();
// 獲取單個的成員變數
// 獲取address並對其賦值,public String address;
Field addressField = c.getField("address");
// public void set(Object obj,Object value)
// 將指定物件變數上此Field物件表示的欄位設定為指定的新值。
addressField.set(obj, "北京"); // 給obj物件的addressField欄位設定值為"北京"
System.out.println(obj);
// 獲取name並對其賦值,name是private修飾的,private String name;
// getField,報錯NoSuchFieldException,改成getDeclaredField
Field nameField = c.getDeclaredField("name");
nameField.setAccessible(true);
nameField.set(obj, "林青霞");
System.out.println(obj);
// 獲取age並對其賦值,int age;
Field ageField = c.getDeclaredField("age");
ageField.setAccessible(true);
ageField.set(obj, 27);
System.out.println(obj);
}
}