日期:2014-05-20  浏览次数:20926 次

java中怎么执行字符串中的代码
本帖最后由 Rlay_2 于 2013-01-24 19:54:00 编辑
我现在根据各种条件,生成了一段代码,但是是存在字符串中的,如:

String javaCode = "HashMap<int, String> aa = new HashMap<int, String>(); aa.put(1,"first")"

就是说这段代码是放在字符串里的, 怎么样才能让这段字符串里的java代码执行下呢?

PS:本人是java新手,用得还不是非常熟练,希望能贴段完整的代码参考,3ks.
java

------解决方案--------------------
以我的理解能力 觉得是没有办法的,但是你可以 试试动态代理什么的东西, 
ASM 是一个 Java 字节码操纵框架。它可以直接以二进制形式动态地生成 stub 类或其他代理类,或者在装载时动态地修改类。ASM 提供类似于 BCEL 和 SERP 之类的工具包的功能,但是被设计得更小巧、更快速,这使它适用于实时代码插装。 可以从这下点功夫试试
------解决方案--------------------
跟ASM包的字节码分析工具无关,楼主需要的是热编译。

java可以热编译,标准API 提供了接口。 看下这个 javax.tools.JavaCompiler

http://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html
------解决方案--------------------
java没有很方便的方法来实现向诸如此类脚本语言的特性,即便你用楼上的方法,运行期热编译虽然很炫,但我觉得与其这样做你肯定能找到其他方法绕过这种方式,因为本来是为了方便,而这样做更复杂了,并且JavaCompiler需要javac如果没理解错的话,这就是说你的程序运行期需要jdk而不是jre,这对客户来说更不方便
------解决方案--------------------
1、java中的类编译、装载过程应该都是以类为单位的,这种字符串经过编译后应该就成了普通字符串,不能生成执行指令了。
2、如果楼主是要动态生成一个类还是可以的,生成指令没想到能有什么办法
------解决方案--------------------
这个也不难啊,说下我的思路

将这些字符串代码写入一个java文件里,然后采用ant动态编译

或者你在程序里自己调用javac来编译生成的java文件也可以,这样不就可以了

然后你再在要调用的地方,采用反射的机制把生成的类注入进来就可以啦,如果

你的这段代码是要嵌入到某个已有的java文件里,那就更简单了,还是采用文件

输入输出的功能,将你的这段代码写入java文件里,比如某个java文件的某一方法里

然后再动态编译下就OK啦
------解决方案--------------------
引用:
java没有很方便的方法来实现向诸如此类脚本语言的特性,即便你用楼上的方法,运行期热编译虽然很炫,但我觉得与其这样做你肯定能找到其他方法绕过这种方式,因为本来是为了方便,而这样做更复杂了,并且JavaCompiler需要javac如果没理解错的话,这就是说你的程序运行期需要jdk而不是jre,这对客户来说更不方便


唯一讲到点子上的人!!

楼主这种奇怪的需求,十有八九是由糟糕的设计造成的。
楼上很多其他人连java 代码和java 字节码都分不清,就来乱讲。