package com.test;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import com.sun.tools.javac.Main;//tools.jar jdk下的lib
public class MyTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws Exception {
// String s =System.getProperty( "user.dir");
System.out.println(eval("(5-3*3)*2"));
}
public static Object eval(String str) throws IOException, Exception{
//生成java文件
String s = "package com.test; public class Temp{public int rt(){ return "+str+"; } }";
File f = new File("Temp.java");
PrintWriter pw = new PrintWriter(new FileWriter(f));
pw.println(s);
pw.close();
//动态编译
Main javac = new Main();
String[] cpargs = new String[] {"-d", System.getProperty( "user.dir")+"/bin","Temp.java"};
int status = javac.compile(cpargs);
if(status!=0){
System.out.println("没有成功编译源文件!");
return null;
}
//调用Temp的rt方法返回结果:
MyTest mc = new MyTest();
Class clasz = mc.getClass().forName("com.test.Temp");
Method rt = clasz.getMethod("rt");
return rt.invoke(clasz.newInstance());
}
}
分享到:
相关推荐
这篇教程将带你了解如何在WPF应用中实现动态编译简单代码,这对于开发需要自定义行为或者灵活扩展的应用程序非常有用。 首先,我们需要理解C#中的`System.CodeDom.Compiler`命名空间,它提供了编译源代码的能力。...
`ConsoleApplication1`可能是一个简单的控制台应用,演示了如何在运行时动态编译和执行C#代码。在这个项目中,你可能会看到如何将上述两种方法整合到实际的项目中,比如读取用户输入的C#代码,然后使用动态编译来...
前几天看到一篇关于.net动态编译的文章 .NET中的动态编译 ,很受启发。在此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件...
在.NET框架中,C#语言提供了强大的动态编译能力,使得开发者可以在运行时将源代码字符串编译为可执行的程序集。这个过程通常涉及到System.CodeDom.Compiler命名空间中的类,如CodeDomProvider和CompilerResults等。...
JavaCompiler --JDK6 API 的简介(java动态编译) JavaCompiler 是 Java 中的一个编译器接口,提供了编译 Java 源代码的功能。在 Java SE6 中,JavaCompiler 接口是 javax.tools 包的一部分,提供了标准的方式来...
下面是一个简单的示例,演示如何使用C#动态编译编译一个简单的源代码字符串: ```csharp using System; using System.CodeDom.Compiler; using Microsoft.CSharp; public class DynamicCompilationExample { ...
本教程将深入讲解如何实现这个过程,主要关注`java动态编译`和`将class生成jar`这两个关键步骤,同时会涉及到`JavaCompiler` API的使用。 首先,让我们了解`JavaCompiler` API。这是Java标准库中的一部分,位于`...
这种功能通常被称为动态编译,对于快速迭代开发、插件架构、自定义脚本执行等场景非常有用。动态编译能够极大地提高开发效率,因为它允许我们免去传统的编译和部署步骤,直接在运行环境中执行新代码。 一、System....
Java 动态编译源码并调用是Java开发中的一种高级技巧,它允许程序在运行时根据需要编译和执行新的代码。这种能力在某些场景下非常有用,例如插件系统、元编程或者在运行时自动生成和执行特定逻辑。下面我们将详细...
例如,以下是一个简单的动态编译示例: ```csharp using System; using System.CodeDom.Compiler; using Microsoft.CSharp; public class DynamicCompiler { public static void Main() { string sourceCode = ...
这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...
在C#编程环境中,动态编译是通过System.CodeDom.Compiler命名空间提供的类来实现的,这使得我们可以在程序运行时动态地创建、编译和执行源代码。这种能力对于构建小型编译器或者代码解释器非常有用,尤其适用于需要...
然而,通过使用Java的反射API和动态编译技术,可以实现类似的功能。动态编译是指在程序运行时将源代码编译成字节码并加载到JVM中执行,这在某些场景下可以极大地提高代码的灵活性。 首先,让我们理解`eval`的基本...
LINUX 下简单的编译和使用动态链接库 在 LINUX 下,编译和使用动态链接库是一项非常重要的技术。动态链接库,即 Shared Object(.so 文件),是将一些常用的代码,例如函数、类等,编译成一个独立的文件,供其他...
### Linux单驱动程序动态编译环境配置 在Linux驱动开发过程中,往往需要对整个Linux内核进行重新编译。然而,对于只需要开发或测试单一驱动的情况,完全可以通过配置特定的环境来实现,而无需对整个内核进行编译。...
Java运行时动态编译是Java语言的一个重要特性,它使得Java程序在运行过程中可以对代码进行优化和调整,极大地提高了程序的性能。这个特性主要得益于Java的Just-In-Time (JIT) 编译器,它是Java虚拟机(JVM)的一部分...
在Linux程序设计中,编译是一个至关重要的环节,它将程序员编写...在学习过程中,可以通过实践操作,如编写简单的C程序并尝试使用gcc编译器分别进行静态和动态编译,观察生成的可执行文件大小和运行效果,以加深理解。
Java6引入的`javax.tools`包解决了这个问题,提供了`JavaCompiler`接口和一系列辅助类,使得动态编译变得简单高效。 `JavaCompiler`接口是Java编译器的主要入口点,它提供了`getStandardJavaFileManager`方法来获取...
代码的动态编译并执行是.NET平台提供给我们的很强大的一个工具,用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序。这在很大程度上给我们提供了另外一...