reflection-新人学习java反射时的问题

问题描述

新人学习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

reflection-新人学习java反射时的问题的相关文章

64位-新人学习Java、安装jdk8后javac用不了了、Java正常使用

问题描述 新人学习Java.安装jdk8后javac用不了了.Java正常使用 我的是WIN1064位系统安装JDK8.调出dos命令输入java有提示.输入Javac时就直接挂了.试了好长时间.都不行.不知道是不是环境变量出了问题.我的是WIN10的64位系统.jdk选择默认安装位置(C:Program FilesJavajdk1.8.0_05) 下面是我的环境变量配置 CLASSPATH:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar; JAVA

数组-新人学习java,遇到 一个问题,求大神帮忙

问题描述 新人学习java,遇到 一个问题,求大神帮忙 一个整数数组有n个元素,能产生多少个差(元素之间可以相加).我知道每个元素有3种状态减数,被减数,或者根本没用,但在写程序时没感觉无法控制没用这个状态,求帮忙 解决方案 public static void main(String[] args) { //创建数据 int n = 6; //int [] arr = {1,2,3,4,5,6}; int []arr=new int[n]; List list=new ArrayList();

新人学习java。在继承上遇到的一个小问题

问题描述 新人学习java.在继承上遇到的一个小问题 代码如下: package construter; class Game { Game(int i){ System.out.println("Game"); }; } class BoarderGame extends Game{ BoarderGame(int i){ super(i);//当我把super参数中的i替换成一个int型数字时就会报错?? System.out.println("BoarderGame c

reflection的应用-java反射机制的小应用

问题描述 java反射机制的小应用 怎样自己写一个通用的BaseDao(利用反射写出通用的增.删.改.查的方法) 解决方案 去看下hibernate的源码

新人学习Java,求指导

问题描述 在某培训班进行了Java的学习,还没开课,元旦后开课吧.在这之前我想做一些准备工作,比如说一些基础知识的准备,一些敲代码的经验等,应该有什么样的思维等.以便日后的学习不会那么的吃力,但是就是不知道该做些什么.在此请教各位,把你们的经验与我分享分享.谢谢!! 解决方案 解决方案二:小心被吃水饺解决方案三:找套视频,或找本书,跟着敲代码.多敲,多理解,这个没有捷径.如果没有基础,到了培训班,估计要很吃力的.解决方案四:引用1楼jdgdf566的回复: 小心被吃水饺 水饺是什么解决方案五:引

新手学习JAVA核心技术时的一个小问题 关于static和void

问题描述 核心技术第八版:112页静态方法是什么意思:因为在做119页的例题时System.out.println("Swap:");Employeea=newEmployee("zha",100);Employeeb=newEmployee("xin",1000);swap(a,b);publicswap(Employeex,Employeey){Employeetemp=x;x=y;y=temp;System.out.println(&quo

Java反射机制的学习

Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法). 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制.你会嗤之以鼻地告诉我,Java反射机制没啥用.或许在J2EE.J2SE等平台,Java反射机制没啥用(具体我也不了解,不多做评论),但是在Android应用开发中,该

学习困惑-我自己在学习java中的 菜雀

问题描述 我自己在学习java中的 菜雀 有好的学习java反射机制的视频么 是应该先学习html+css+js 还是先学slq数据库呢 都有学一点不知道先把那个先学好更好??? 解决方案 把javaSE学好了,再考虑其他的吧,html+css+js只是做前端的.属于前台,学完javaSE再学sql再学html+css+js吧. 解决方案二: 先学习基础 基础最重要 解决方案三: 要注重基础 很多东西想是想不出来的,要实践 当你真正运用的时候就逼着自己学习 那时候就会了 人的潜能是无限的 祝学习

java-新人学习JAVA,关于继承的一个问题

问题描述 新人学习JAVA,关于继承的一个问题 老师布置了一个作业,具体要求如下: 先创建一个flight对象(这个对象只有一个属性,就是航班号) 然后根据用户的输入, 判断这个flight对象 是pflight(个人航班,有两个属性,分别是航班号和个人的名字,航班号继承之前创建flight对象的属性,需要用户个人的名字) 还是gflight(群体航班,分别是航班号和群里数量,航班号继承之前创建flight对象的属性,需要用户输入补充群体的数量), 请问该如何实现?(需要在一个单独的CLASS里