`
hxr521521
  • 浏览: 10389 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

简单动态编译

    博客分类:
  • java
阅读更多
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());
		 
		}

}



分享到:
评论

相关推荐

    C# wpf 动态编译简单代码

    这篇教程将带你了解如何在WPF应用中实现动态编译简单代码,这对于开发需要自定义行为或者灵活扩展的应用程序非常有用。 首先,我们需要理解C#中的`System.CodeDom.Compiler`命名空间,它提供了编译源代码的能力。...

    c#动态编译生成

    `ConsoleApplication1`可能是一个简单的控制台应用,演示了如何在运行时动态编译和执行C#代码。在这个项目中,你可能会看到如何将上述两种方法整合到实际的项目中,比如读取用户输入的C#代码,然后使用动态编译来...

    C#代码动态编译、动态执行、动态调试

    前几天看到一篇关于.net动态编译的文章 .NET中的动态编译 ,很受启发。在此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件...

    C#动态编译,可以编译TXT格式的文件形成C#文件

    在.NET框架中,C#语言提供了强大的动态编译能力,使得开发者可以在运行时将源代码字符串编译为可执行的程序集。这个过程通常涉及到System.CodeDom.Compiler命名空间中的类,如CodeDomProvider和CompilerResults等。...

    JavaCompiler --JDK6 API的简介(java动态编译)

    JavaCompiler --JDK6 API 的简介(java动态编译) JavaCompiler 是 Java 中的一个编译器接口,提供了编译 Java 源代码的功能。在 Java SE6 中,JavaCompiler 接口是 javax.tools 包的一部分,提供了标准的方式来...

    C#动态编译

    下面是一个简单的示例,演示如何使用C#动态编译编译一个简单的源代码字符串: ```csharp using System; using System.CodeDom.Compiler; using Microsoft.CSharp; public class DynamicCompilationExample { ...

    java动态编译指定java文件且将java文件生成jar

    本教程将深入讲解如何实现这个过程,主要关注`java动态编译`和`将class生成jar`这两个关键步骤,同时会涉及到`JavaCompiler` API的使用。 首先,让我们了解`JavaCompiler` API。这是Java标准库中的一部分,位于`...

    c#动态读取代码并动态编译

    这种功能通常被称为动态编译,对于快速迭代开发、插件架构、自定义脚本执行等场景非常有用。动态编译能够极大地提高开发效率,因为它允许我们免去传统的编译和部署步骤,直接在运行环境中执行新代码。 一、System....

    Java 动态编译源码并调用

    Java 动态编译源码并调用是Java开发中的一种高级技巧,它允许程序在运行时根据需要编译和执行新的代码。这种能力在某些场景下非常有用,例如插件系统、元编程或者在运行时自动生成和执行特定逻辑。下面我们将详细...

    C#中动态编译应用程序C#源码

    例如,以下是一个简单的动态编译示例: ```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源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...

    C# 动态编译文本框里的代码

    在C#编程环境中,动态编译是通过System.CodeDom.Compiler命名空间提供的类来实现的,这使得我们可以在程序运行时动态地创建、编译和执行源代码。这种能力对于构建小型编译器或者代码解释器非常有用,尤其适用于需要...

    在java中利用动态编译实现eval

    然而,通过使用Java的反射API和动态编译技术,可以实现类似的功能。动态编译是指在程序运行时将源代码编译成字节码并加载到JVM中执行,这在某些场景下可以极大地提高代码的灵活性。 首先,让我们理解`eval`的基本...

    LINUX下简单的编译和使用动态链接库

    LINUX 下简单的编译和使用动态链接库 在 LINUX 下,编译和使用动态链接库是一项非常重要的技术。动态链接库,即 Shared Object(.so 文件),是将一些常用的代码,例如函数、类等,编译成一个独立的文件,供其他...

    linux 单驱动程序动态编译环境配置

    ### Linux单驱动程序动态编译环境配置 在Linux驱动开发过程中,往往需要对整个Linux内核进行重新编译。然而,对于只需要开发或测试单一驱动的情况,完全可以通过配置特定的环境来实现,而无需对整个内核进行编译。...

    Java运行时动态编译

    Java运行时动态编译是Java语言的一个重要特性,它使得Java程序在运行过程中可以对代码进行优化和调整,极大地提高了程序的性能。这个特性主要得益于Java的Just-In-Time (JIT) 编译器,它是Java虚拟机(JVM)的一部分...

    3-LINUX程序设计与交叉编译(3)-静态编译和动态编译.pdf

    在Linux程序设计中,编译是一个至关重要的环节,它将程序员编写...在学习过程中,可以通过实践操作,如编写简单的C程序并尝试使用gcc编译器分别进行静态和动态编译,观察生成的可执行文件大小和运行效果,以加深理解。

    Java6动态编译案例

    Java6引入的`javax.tools`包解决了这个问题,提供了`JavaCompiler`接口和一系列辅助类,使得动态编译变得简单高效。 `JavaCompiler`接口是Java编译器的主要入口点,它提供了`getStandardJavaFileManager`方法来获取...

    让C#语言充当自身脚本!——.NET中的动态编译

    代码的动态编译并执行是.NET平台提供给我们的很强大的一个工具,用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序。这在很大程度上给我们提供了另外一...

Global site tag (gtag.js) - Google Analytics