黑马程序员技术交流社区
标题:
反射的一点小问题。
[打印本页]
作者:
孙浩迪
时间:
2012-6-23 16:30
标题:
反射的一点小问题。
本帖最后由 sunhaodi 于 2012-6-23 22:38 编辑
import java.lang.reflect.Field;
public class ReflectDemo {
public static void main(String[] args) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Person p = new Person(3,4);
Field filedx = p.getClass().getField("x");
System.out.println(filedx.get(p)); //这个代码我和张孝祥老师写的一样, 为什么运行不出来会报错啊
// Field filedy= p.getClass().getDeclaredField("y");
// filedy.setAccessible(true);
// System.out.println(filedy.get(p));
}
}
class Person{
private int x;
private int y;
private String str1 = "aaaaaaa";
private String str2 ="ddddddd";
public Person(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return str1+".............."+str2;
}
}
看注释, 不明白什么情况,检查半天,一模一样啊
作者:
闾丘日月
时间:
2012-6-23 16:36
Field filedx = p.getClass().getField("x");
filedx.setAccessable(true);
...........
你的成员变量是私有的,要更改访问权限,听课要听全,张老师这么做的时候person的x应该是公有的。
作者:
李盼
时间:
2012-6-23 16:39
//Field filedx = p.getClass().getField("x"); x是私有字段,这个方法无法获得,要用我下面的方法获得,并且把这个字段的访问权限取消!
Field filedx = p.getClass().getDeclaredField("x");
filedx.setAccessible(true);
System.out.println(filedx.get(p));
作者:
马林康
时间:
2012-6-23 16:43
字段权限设置为了私有 调用的方法错误
作者:
孙峰
时间:
2012-6-23 16:49
class Person{
private int x;
private int y;
你这里 的x 和 y 都是私有啊,按你注释掉的方法,只有y能被暴力访问。 张老师的例子中 x是私有, y是公有的。你再仔细听听就知道了。
作者:
陈嘉宾
时间:
2012-6-23 17:11
本帖最后由 陈嘉宾 于 2012-6-23 17:02 编辑
class Person{
private int x;
private int y;
private String str1 = "aaaaaaa";
private String str2 ="ddddddd";
public Person(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return str1+".............."+str2;
}
}
这里是私有的所以要用爆力反射,所以你第一个打印不出来用暴力反射的方法public String str1 = "aaaaaaa"; public String str2 ="ddddddd";这里你改成私有的当然访问不到了,改成public
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2