java读取变量getDeclaredField

VenomSplasher 2012-11-28 03:54:22
如何用反射读取私有属性?希望给我例子谢谢..
以及
public class A {
public String m;
public void functionA(String s1,String s2){
s1 = "d";
s2 = "e";
m = s1 + s2;
};
public static void main(String[] args) {
A a = new A();
System.out.println(a.m);
}
}
怎么获取改变了的m值
...全文
605 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
suciver 2012-11-29
  • 打赏
  • 举报
回复 1

A a=new A(); 
a.functionA("a","b");//你先调用了这个方法再用反射获得值。
Field field=A.class.getDeclaredField("m");//根据变量名m获得字段 field.setAccessible(true);//设置字段可访问,即暴力反射 String m=(String)field.get(a);//在那个对象上获取此字段的值 System.out.println(m);
suciver 2012-11-29
  • 打赏
  • 举报
回复
引用 8 楼 nighthag 的回复:
引用 7 楼 suciver 的回复: 引用 3 楼 nighthag 的回复:引用 1 楼 suciver 的回复: Java code?123456A a=new A();Field field=A.class.getDeclaredField("m");//根据变量名m获得字段field.setAccessible(true);//设置字段可访问,即暴力反射String m=(Strin……
一样的你方法的里的m是成员变量你调用下这个方法再去反射,一样能获得值
VenomSplasher 2012-11-29
  • 打赏
  • 举报
回复
引用 7 楼 suciver 的回复:
引用 3 楼 nighthag 的回复:引用 1 楼 suciver 的回复: Java code?123456A a=new A();Field field=A.class.getDeclaredField("m");//根据变量名m获得字段field.setAccessible(true);//设置字段可访问,即暴力反射String m=(String)field.……
恩 你的方法是把m设成私有的并赋值然后可以取A类私有变量m的值,但是要取出方法里那个被赋过值的m怎么获得?
VenomSplasher 2012-11-29
  • 打赏
  • 举报
回复
引用 10 楼 suciver 的回复:
Java code?1234A a=new A(); a.functionA("a","b");//你先调用了这个方法再用反射获得值。Field field=A.class.getDeclaredField("m");//根据变量名m获得字段 field.setAccessible(true);//设置字段可访问,即暴力反射 String m=(String)field.……
恩 谢谢了
suciver 2012-11-28
  • 打赏
  • 举报
回复
引用 3 楼 nighthag 的回复:
引用 1 楼 suciver 的回复: Java code?123456A a=new A();Field field=A.class.getDeclaredField("m");//根据变量名m获得字段field.setAccessible(true);//设置字段可访问,即暴力反射String m=(String)field.get(a);//在那个对象上获取此字段的值System.out.……
你没给m赋值当然是null了,我只是new出来了A的对象又没给他赋值。你给他赋个值就知道了
VenomSplasher 2012-11-28
  • 打赏
  • 举报
回复
引用 5 楼 bayougeng 的回复:
你不想要"de",为什么要在方法里赋值呢?如果你要返回定值,那这个方法为什么要设置参数呢?
嗯 就是好奇如果有遇到这种情况的话怎么解决
bayougeng 2012-11-28
  • 打赏
  • 举报
回复
你不想要"de",为什么要在方法里赋值呢?如果你要返回定值,那这个方法为什么要设置参数呢?
VenomSplasher 2012-11-28
  • 打赏
  • 举报
回复
引用 2 楼 sgyyz 的回复:
Java code?12345public static void main(String[] args) { A a = new A(); a.functionA("a", "b"); System.out.println(a.m); } 这样就能获取到改变了的m值 至于你说的反射要想获取一个私有属性的值,那么你需要给……
这个值是变了 但是和我要的结果不一样... 如果 a.functionA("a", "b"); 我希望他调出来的是 "ab" 我是想通过实例名.属性直接得到那个m在方法中改变了的值
VenomSplasher 2012-11-28
  • 打赏
  • 举报
回复
引用 1 楼 suciver 的回复:
Java code?123456A a=new A();Field field=A.class.getDeclaredField("m");//根据变量名m获得字段field.setAccessible(true);//设置字段可访问,即暴力反射String m=(String)field.get(a);//在那个对象上获取此字段的值System.out.println(……
这个我刚试了下 获得的还是Null。。。。
sgyyz 2012-11-28
  • 打赏
  • 举报
回复
public static void main(String[] args) {
        A a = new A();
        a.functionA("a", "b");
        System.out.println(a.m);
    }
这样就能获取到改变了的m值 至于你说的反射要想获取一个私有属性的值,那么你需要给私有属性设置get方法,然后通过这个反射调用这个get方法就可以得到值
suciver 2012-11-28
  • 打赏
  • 举报
回复

A a=new A();
Field field=A.class.getDeclaredField("m");//根据变量名m获得字段
field.setAccessible(true);//设置字段可访问,即暴力反射
String m=(String)field.get(a);//在那个对象上获取此字段的值
System.out.println(m);

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧