java使用ecj动态编译,Java动态生成代码

1,Java动态生成代码可以的,我说说大概思路 , 很简单,你自己具体实现吧,把代码写给你没意义的:1.将你这段字符串输出到一个文件里 , 用Java类文件的方式命名 。2.调用外部javac命令将该文件编译 。3.用类加载器(ClassLoad)动态加载新的class文件并用Class.forName()注册该类,然后就可以正常使用了 。上面的每一步都能在baidu中找到实现方法,自己发挥吧 。代码需要经过编译才能执行 。你的问题我不太明白,可以把要分开的代码打成不同的包,然后通过exec() 这样的调用 。如果你是想直接执行这些代码是不可能的 。为什么不用 if else
2,JAVA里如何实现动态算法如果只是简单的加减乘除 , 采用递归方式,按照运算符优先级计算 , 最后得到结果如果复杂一点,可以采用动态编译,你写的字符串算式 , 就变成java代码,最后采用反射执行两种方式 。这个可以使用格式化字符串完成 。用法参见:formatter类 。如://格式:%[argument_index$][flags][width][.precision]conversionstring result = string.format("%1$20s", "abc");int F = A * B ;int G = C + D ;if ( F > 0 || G == 0){ (这里放你要运行的东西) ;}不知道是不是你想要的 。。。你提问的问题有点模糊啊 。。
3,在java代码中实现动态编译java文件import javax.tools.*;import java.io.*;/** * @author hardneedl */final public class MyCompile /** * @param args 命令行参数只有1个,即待编译的源代码文件的绝对路径 * @throws FileNotFoundException */ public static void main(String... args) throws FileNotFoundException JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int r = compiler.run(null,null,null,args[0]); System.out.println(r == 0? "成功":"失败"); }}【java使用ecj动态编译,Java动态生成代码】
4,Java字节代码的操纵方法有哪些Java作为业界应用最为广泛的语言之一,深得众多软件厂商和开发者的推崇,更是被包括Oracle在内的众多JCP成员积极地推动发展 。但是对于Java语言的深度理解和运用 , 毕竟是很少会有人涉及的话题 。本文为IBM工程师成富编写的《Java深度历险》的第一部分Java字节代码的操纵,希望读者们喜欢 。在一般的Java应用开发过程中,开发人员使用Java的方式比较简单 。打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了 。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(byte code) , 以类文件的形式保存在磁盘上(.class) 。Java虚拟机(JVM)会负责把Java字节代码加载并执行 。Java通过这种方式来实现其“编写一次,到处运行(Write once, run anywhere)” 的目标 。Java类文件中包含的字节代码可以被不同平台上的JVM所使用 。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中 。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类 。在某些情况下 , 可能会需要动态的生成 Java字节代码,或是对已有的Java字节代码进行修改 。这个时候就需要用到本文中将要介绍的相关技术 。首先介绍一下如何动态编译Java源文件 。更多详情见: http://java.e800.com.cn/articles/2011/121/1295579654721_1.html不错哦 。感谢分享 。算是有两种,java命令打开,还有一个appletviewer用来运行嵌入在网页中的小程序 。在JSP中有导入包的方式 。5,怎么动态编译Java源文件(Write once, run anywhere)” 的目标 。Java类文件中包含的字节代码可以被不同平台上的JVM所使用 。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中 。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类 。在某些情况下,可能会需要动态的生成 Java字节代码 , 或是对已有的Java字节代码进行修改 。这个时候就需要用到本文中将要介绍的相关技术 。首先介绍一下如何动态编译Java源文件 。动态编译Java源文件在一般情况下,开发人员都是在程序运行之前就编写完成了全部的Java源代码并且成功编译 。对有些应用来说,Java源代码的内容在运行时刻才能确定 。这个时候就需要动态编译源代码来生成Java字节代码,再由JVM来加载执行 。典型的场景是很多算法竞赛的在线评测系统(如PKU JudgeOnline),允许用户上传Java代码,由系统在后台编译、运行并进行判定 。在动态编译Java源文件时,使用的做法是直接在程序中调用Java编译器 。JSR 199引入了Java编译器API 。如果使用JDK 6的话 , 可以通过此API来动态编译Java代码 。比如下面的代码用来动态编译最简单的Hello World类 。该Java类的代码是保存在一个字符串中的 。public class CompilerTestpublic static void main(String[] args) throws ExceptionString source = "public class MainJavaCompiler compiler = ToolProvider.getSystemJavaCompiler();StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);StringSourceJavaObject sourceObject = new CompilerTest.StringSourceJavaObject("Main", source);Iterable< extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);CompilationTask task = compiler.getTask(null, fileManager, null, null, null, fileObjects);boolean result = task.call();if (result) {

    推荐阅读