package com.wkcto.chapter08.demo02;
import java.lang.reflect.Field;
/**
* 通過反射訪問字段
*
* @author 蛙課網
*
*/
public class Test02 {
public static void main(String[] args) throws Exception{
//1)創建Class對象
Class<?> class1 = Person.class;
//2) 訪問name公共字段
//2.1 反射name字段
Field nameF = class1.getField("name");
//2.2 給字段賦值, name字段是一個實例變量, 先創建實例
//2.2.1 創建Person類的實例
Object p1 = class1.newInstance();
//2.2.2 給字段賦值
//field.set( 實例名, 字段值 )
nameF.set(p1, "wkcto");
//2.3 訪問字段的值,
//field.get( 實例名 )
System.out.println( nameF.get(p1) );
System.out.println( p1 );
//3) 訪問gender私有字段
//3.1 反射gender字段 , 非公共字段
Field genderF = class1.getDeclaredField("gender");
//設置字段的可訪問性
genderF.setAccessible(true);
//3.2 設置字段值
genderF.set(p1 , "男");
//3.3訪問
System.out.println( genderF.get(p1));
System.out.println( p1 );
//4)訪問靜態字段, 在實例名的位置傳遞null
//反射字段
Field countryF = class1.getDeclaredField("country");
//設置字段的值
countryF.set(null, "china");
//讀取字段的值
System.out.println( countryF.get(null));
}
}