Java 动态编译,Java代码的静态编译和动态编译中的问题是什么

1,Java代码的静态编译和动态编译中的问题是什么Java代码正常是静态编译成字节码,由对应平台的JVM加载执行,静态编译无法动态扩展功能 。动态编译有两种方式实现:1. 从源码编译,需要调用Java Compiler,程序需要运行于JDK(而不是JRE)之上 。2. 动态字节码生成技术(如CGLib、ASM)创建类 。动态编译可以简化代码,增强类功能 , 但也带来了代码复杂度,线上不易维护 。
2 , 如何在java中动态执行一段代码有点难度,, , ,,需要动态编译成类、、、、然后反射调用首先你可以使用输入输出流(或者你说的可能是要用反射得到程序结果来解析)解析做出*.java文件 。然后可以使用runtime调用dos下的java编译命令编译取得class文件 。然后使用classloader,反射等组合执行生成的class文件 。
3,java动态生成方法可以的 , 我说说大概思路,很简单,你自己具体实现吧,把代码写给你没意义的: 1.将你这段字符串输出到一个文件里,用Java类文件的方式命名 。2.调用外部javac命令将该文件编译 。3.用类加载器(ClassLoad)动态加载新的class文件并用Class.forName()注册该类,然后就可以正常使用了 。上面的每一步都能在baidu中找到实现方法,自己发挥吧 。求采纳这个也能实现的,这就得利用java的动态编译,java中可以利用代码临时生成java文件,并且执行编译,运行,但这个有一点麻烦,还要用到java中的反映机制.apache的commons-beanutils包中就有这样的方法,hibernate中映射类中的get与set方法是存在的.最好不要用临时生成java文件,动态编译.【Java 动态编译,Java代码的静态编译和动态编译中的问题是什么】
4,在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? "成功":"失败"); }}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) {

    推荐阅读