反射 - 通过反射机制访问私有成员变量

package com.xxxx;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 通过反射修改私有成员变量的值
 * 
 * @author Dw
 *
 */
public class AccessPrivateMemVarWithReflect
{
	public static void main(String[] args) throws Exception
	{
		Class<?> classType = Class.forName("com.xxxx.TestAccessPrivateMemVar");	
		Object test = classType.newInstance();
		Field field = classType.getDeclaredField("name");
		// 突破private权限
		field.setAccessible(true);
		// 设置新值
		field.set(test, "ZhangSan");
		// 获取getName方法
		Method getName = classType.getMethod("getName", new Class[] {});
		// call
		System.out.println(getName.invoke(test, new Object[] {})); // ZhangSan
		
		field.set(test, "LiSi");
		System.out.println(getName.invoke(test, new Object[] {})); // LiSi
			
	}
}

class TestAccessPrivateMemVar	
{
	private String name;
	
	public TestAccessPrivateMemVar()
	{
		// TODO Auto-generated constructor stub
	}
	
	public String getName()
	{
		return this.name;
	}
}

  

posted @ 2017-09-12 15:14  C/C++/Python/Java  阅读(1202)  评论(0编辑  收藏  举报