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