A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

起因来自于这个测试题:编写一个程序,记录该程序运行次数。运行满足5次,就提示用户“软件试用期限已到”
用配置文件记录次数应该是视频上有讲过的,但是学过反射以后我们知道
一个类是由类加载器将硬盘上的.class文件加载到内存中的,而我们能通过反射的方式很轻易的改变内存中类的成员变量的值,那么这个改变了的值到底能不能写回给.class文件呢??
我的直觉是应该有这么个东西,我能读.class文件,理所当然应该能写.class文件,但是我在Class类和ClassLoader类中都没有发现类似方法,于是我惆怅了。。
我的这个想法能不能做到呢?
java到底有没有提供比如ClassWriter这样的类?如果有,是什么
如果没有,我们有没有可能自己写个这样的类出来,将内存中的字节码存到.class文件中?

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
我晕,没人理我么。。。。
回复 使用道具 举报
ClassLoader下的defineClass() 方法可以将一个 byte 数组转换为 Class 类的实例。
楼主可以试试
回复 使用道具 举报
在张老师的加密解密类文件和自定义类加载器中好像用到了这个。但是他只能从硬盘上往内存读,不能写到硬盘啊。
回复 使用道具 举报
楼主去看看动态代理,是可以在运行时生成新.class文件的,并且.class文件能够运行,但是修改原有文件我没看过
修改配置文件是最快的咯
回复 使用道具 举报
张晨 发表于 2012-5-30 08:51
楼主去看看动态代理,是可以在运行时生成新.class文件的,并且.class文件能够运行,但是修改原有文件我没看 ...

哦,那一块我还没看到。你如果有办法的话能不能稍微详细点给个思路?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马