您的位置:首页 > 编程语言 > Java开发

java反射-访问private属性和方法

2013-04-29 23:24 453 查看
Private类中有私用成员变量和私有方法,正常情况下外部类是无法访问私有方法和改变私有成员变量的值

public class Private {

private String names = "zs";
private String sayHello(String name){
return "say:"+name;
}

public String getNames(){
return names;
}
}

通过反射可实现对私有方法的访问和改变私有成员变量的值

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

public class TestPrivate01 {

public static void main(String[] args) throws Exception {
Private p = new Private();
//Private p2 = new Private();
//System.out.println(p.getClass()==p2.getClass());
Class<?> classType = p.getClass();

Method privatemethod = classType.getDeclaredMethod("sayHello", new Class[]{String.class});
Field field = classType.getDeclaredField("names");
//将访问权限控制检查压制(suppress)
privatemethod.setAccessible(true);
field.setAccessible(true);

field.set(p, "ls");
System.out.println(privatemethod.invoke(p, new Object[]{"Hello"}));
System.out.println(p.getNames());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: