问题描述
- 新人学习java反射时的问题
-
在下想通过反射来改变一个String对象中的count变量,但是报错里面说String没有count变量,在网上查了一点资料发现String是有一个私有变量count的,在下在此求教大神解答,不胜感激
package dear_brick;import java.lang.reflect.Field;
public class dear {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException{
dear brick;
final String str = "brick";
dear.changeStringValue(str);
dear.changeStringCount(str,3);
System.out.println(str);
System.out.println(str.length());
}public static void changeStringValue(String str) throws ClassNotFoundException,NoSuchFieldException,IllegalAccessException{ String name = str.getClass().getName(); Class clazz = Class.forName(name); Field field = clazz.getDeclaredField("value"); field.setAccessible(true); Object object = field.get(str); char[] obj_value = new char[6]; for(int i = 0; i<6; i++){ obj_value[i] = '6'; } field.set(str,obj_value); } public static void changeStringCount(String str,int count) throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{ String class_name = str.getClass().getName(); Class clazz = Class.forName(class_name); Field field = clazz.getDeclaredField("count"); field.setAccessible(true); Object object = field.get(str); field.set(str, count); }
}
错误信息:
Exception in thread "main" java.lang.NoSuchFieldException: count
at java.lang.Class.getDeclaredField(Class.java:2070)
at dear_brick.dear.changeStringCount(dear.java:31)
at dear_brick.dear.main(dear.java:10)
解决方案
首先,你可以追踪下java的String类,真的没有count这个属性的啊。
其次,相信我,我找了好几遍,真的没有,编译器也很无辜,真的没有count这个属性。
你能告诉我你是用的JDK哪个版本么?
解决方案二:
我擦我学的不好,只是劝你不要太执着,还有好多东西要学,学习是为了创造价值,冷静点!要不然你会学的很慢
解决方案三:
http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
时间: 2024-11-02 16:25:53