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