成员变量的反射,视频上的代码我也基本上明白什么意思了:发现一个有趣的地方:
public class Main {
/**
* @param args
*/
public static void main(String[] args)throws Exception
{
ReflectPoint pt = new ReflectPoint();
changString(pt);
System.out.println(pt);
}
public static void changString (Object obj)throws Exception
{
Field[] fields = obj.getClass().getFields();
for (Field field :fields){
if (field.getType()==String.class){
String oldString = (String)field.get(obj);
String newString = oldString.replace('b', 'a');
field.set(obj, newString);
}
}
}
}这个是主类。
public class ReflectPoint
{
public String a = "ball";
public String b = "basketball";
public String c = "Six";
public ReflectPoint()
{
}
@Override
public String toString() {
return "ReflectPoint [a=" + a + ", b=" + b + ", c=" + c + "]";
}
}这个是第二个类。
这样运行时输出的就是 :ReflectPoint [a=aall, b=aasketaall, c=Six]
但是如果第二个类里面String前面的public 都拿掉那么
运行结果: ReflectPoint [a=ball, b=basketball, c=Six] 程序就不修改String了。
接着我百度了下访问权限 :
public 全部可见
protected 子类可见
default 包内可见
private 本类可见
如果成员变量前没有修饰的话应该是default包内可见。而我的两个类是属于同一个包
为什么访问不到? |
|