Java面向对象
Java异常
Java数组
Java常用类
Java集合
Java IO流
Java线程
Java反射
Socket编程
Java注解开发
Java GoF设计模式
HashMap
Java内存模型
Java线性表

Java通过反射访问字段值

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

}