`
sbpya
  • 浏览: 610046 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

在java中动态执行一段代码

    博客分类:
  • Java
阅读更多

 

动态的执行一段简单代码,采用生成java文件,调用javac编译,反射执行的方式。

只是一个简单测试,有些地方有待完善。

代码如下

 

--------------------------------------------------------------------------------


import java.io.*;

/**
* 动态执行一段代码(生成文件->编译->执行)
* @author kingfish
* @version 1.0
*/
public class TestRun {
private String fileName = "Test.java";
private String className= "Test.class";
public TestRun() {
File f = new File(fileName);
if(f.exists()) f.delete();

f = new File(className);
if(f.exists()) f.delete();
}

/**
* 创建java文件
*/
public void createJavaFile(String body) {
String head = "public class Test{\r\n public static void runCode(){";

String end = "\r\n }\r\n}";
try {
DataOutputStream dos = new DataOutputStream(new FileOutputStream(
fileName));
dos.writeBytes(head);
dos.writeBytes(body);
dos.writeBytes(end);
dos.close();
}
catch (Exception e) {
e.printStackTrace();
}
}

/**
* 编译
*/
public int makeJavaFile() {
int ret = 0;
try {
Runtime rt = Runtime.getRuntime();
Process ps = rt.exec("cmd /c javac " + fileName);
ps.waitFor();
byte[] out = new byte[1024];
DataInputStream dos = new DataInputStream(ps.getInputStream());
dos.read(out);
String s = new String(out);
if (s.indexOf("Exception") > 0) {
ret = -1;
}
}
catch (Exception e) {
ret = -1;
e.printStackTrace();
}
return ret;
}

/**
* 反射执行
*/
public void run() {
try {
Class.forName("Test").getMethod("runCode", new Class[] {}).invoke(null, new Object[]{});
}
catch (Exception e) {
e.printStackTrace();
}
}

/**
* 测试
*/
public static void main(String[] args) {

String cmd = "System.out.println(\"usage:java TestRun int i=1; System.out.println(i+100);\");";
if(args.length>=1){
cmd = args[0];
}
TestRun t = new TestRun();
t.createJavaFile(cmd);
if (t.makeJavaFile() == 0) {
t.run();
}
}
}

 


--------------------------------------------------------------------------------


测试:

java TestRun System.out.println(\"Hello,World!\");

java TestRun "int i=1;int j=2;System.out.println(i+j);"

 

分享到:
评论

相关推荐

    Java动态编译Java代码,运行在内存中,并执行

    添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等 * 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并...

    java虚拟机开发,刚刚走通执行了一段测试java代码

    在Java虚拟机(JVM)开发领域,成功执行一段测试Java代码是一个重要的里程碑。这涉及到对JVM的理解,包括其内部工作原理、字节码解析、类加载机制以及方法调用等核心概念。以下是一些关于Java虚拟机开发的相关知识点...

    Java类动态加载(一)——java源文件动态编译为class文件

    这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...

    java代码-使用java解决Java计算一段程序的运行时间的源代码

    java代码-使用java解决Java计算一段程序的运行时间的源代码 ——学习参考资料:仅用于个人学习使用!

    Java基础练习代码

    本文将深入探讨Java基础练习代码中的关键概念,帮助初学者巩固基础,提高编程技能。 首先,Java是一种面向对象的编程语言,它的核心特性包括封装、继承和多态。在练习代码中,你会看到如何定义类(class)并创建...

    JDK8 下 SpringBoot 应用动态编译 Java 源码并注入 Spring 容器

    基于接口、抽象类实现不停机动态调整代码的目的,将修改后的源码文件放置于指定目录下,读取文件后执行动态编译方法,即可将该类重新加载,新的类可以在Spring容器从新注册,且仅在当前窗口生效。如果重启了服务或...

    java内存动态编译执行

    Java内存动态编译执行是Java程序运行时的一个关键特性,它涉及到JVM(Java虚拟机)的即时编译器(JIT,Just-In-Time Compiler)和元空间(Metaspace)等核心概念。在Java的世界里,代码首先会被解释器逐行解释执行,...

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

    在Java编程中,有时我们需要在运行时动态地编译源代码文件,并将其打包成可执行的JAR(Java Archive)文件。这样的需求通常出现在我们希望根据用户输入或特定条件生成并执行新的代码逻辑时。本教程将深入讲解如何...

    java新手代码适合初学者简单经典.zip

    - **循环语句**:for、while和do-while循环用于重复执行一段代码,直到满足特定条件为止。初学者在学习这些文件时,可能会看到如何运用这些循环结构。 3. **方法(Methods)** - 在Java中,方法是一组完成特定...

    动态生成、编译、运行java文件

    在IT行业中,动态生成、编译以及运行Java文件是一项重要的技术,它允许程序在运行时创建新的Java代码并执行。这种技术广泛应用于元编程、插件系统、代码自动生成等场景,极大地提高了软件的灵活性和可扩展性。下面将...

    北大青鸟S1课程全部Java代码

    3. 方法:用于封装一段可重复使用的代码,通过调用来执行。 4. 异常处理:Java的异常处理机制(try-catch-finally)帮助程序在出现错误时进行恢复或记录错误信息。 三、Eclipse环境 Eclipse是一款强大的开源集成...

    java第一件代码

    - **循环语句**:for,while,do-while用于重复执行一段代码。 - **跳转语句**:break和continue用于提前结束循环或跳过当前循环迭代。 8. **数组**: 数组是存储同一类型元素的集合。在Java中,你可以声明并...

    五子棋--java代码在eclipse中运行

    总结,"五子棋--Java代码在Eclipse中运行"项目展示了如何利用Java语言和其GUI工具开发一款桌面游戏。它涵盖了图形界面设计、事件处理、游戏逻辑等多个编程知识点,对于学习Java编程和游戏开发的初学者来说,这是一个...

    JavaME源程序代码

    3. **JavaME教程**:这表明代码可能被设计为教学材料,帮助初学者逐步学习JavaME编程,每段代码都对应一个特定的教学点。 至于“简体版代码”,这可能意味着代码注释和文档是用简体中文编写的,适合中文用户阅读和...

    Java实现等待所有子线程结束后再执行一段代码的方法

    在 Java 中,实现等待所有子线程结束后再执行一段代码是非常重要的,因为它可以确保主线程等待所有子线程完成任务后再继续执行。这篇文章将详细介绍 Java 实现等待所有子线程结束后再执行一段代码的方法。 ...

    Java运行时动态编译

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

    Java事务的简单代码

    当我们谈论"Java事务"时,我们通常指的是在多条SQL语句执行过程中保持数据完整性的一种方法。以下是一个简化的Java事务处理代码示例,适用于初学者理解和学习。 首先,我们需要了解Java中的JDBC(Java Database ...

    Java web动态网站

    Java Web动态网站是一种基于Java技术构建的互联网应用程序,它能够为用户提供交互式的、内容更新实时的网络服务。这个课程设计适合初学者入门,通过学习,你可以掌握如何利用Java Web技术来开发动态、功能丰富的网站...

    在Java中运行Perl脚本 JERL

    这段代码会创建一个Perl解释器实例,执行打印"Hello, World!"的Perl语句,然后清理资源。 **交互与数据传递** JERL不仅支持运行Perl脚本,还允许Java和Perl之间进行数据交换。你可以通过`perl.setVariable("varName...

    java 代码java 代码java 代码

    这段代码定义了一个名为`HelloWorld`的类,其中`main`方法是程序的入口点,当程序运行时,会首先执行这里。`System.out.println`是输出语句,用于打印字符串到控制台。 Java代码的执行需要经过编译和解释两个阶段。...

Global site tag (gtag.js) - Google Analytics