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);"
相关推荐
添加动态执行的编译环境 options 是个集合,添加内容,字符集,classpath等 * 6.传入JavaFileObject的java文件,是个集合,创建JavaSourceObject实现这个接口,Kind.SOURCE.extension = '.java' * 7.创建任务并...
在Java虚拟机(JVM)开发领域,成功执行一段测试Java代码是一个重要的里程碑。这涉及到对JVM的理解,包括其内部工作原理、字节码解析、类加载机制以及方法调用等核心概念。以下是一些关于Java虚拟机开发的相关知识点...
这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时将Java源代码(.java)编译成对应的字节码文件(.class),并将其加载到Java虚拟机(JVM)中。以下是对这个主题的详细解析...
java代码-使用java解决Java计算一段程序的运行时间的源代码 ——学习参考资料:仅用于个人学习使用!
本文将深入探讨Java基础练习代码中的关键概念,帮助初学者巩固基础,提高编程技能。 首先,Java是一种面向对象的编程语言,它的核心特性包括封装、继承和多态。在练习代码中,你会看到如何定义类(class)并创建...
基于接口、抽象类实现不停机动态调整代码的目的,将修改后的源码文件放置于指定目录下,读取文件后执行动态编译方法,即可将该类重新加载,新的类可以在Spring容器从新注册,且仅在当前窗口生效。如果重启了服务或...
反射是Java的另一个强大特性,允许在运行时检查和修改类、接口和对象。通过案例,你可以了解如何使用Class类、Constructor类、Method类和Field类进行反射操作。 最后,Java还提供了丰富的API和框架,如Swing或...
Java内存动态编译执行是Java程序运行时的一个关键特性,它涉及到JVM(Java虚拟机)的即时编译器(JIT,Just-In-Time Compiler)和元空间(Metaspace)等核心概念。在Java的世界里,代码首先会被解释器逐行解释执行,...
在Java编程中,有时我们需要在运行时动态地编译源代码文件,并将其打包成可执行的JAR(Java Archive)文件。这样的需求通常出现在我们希望根据用户输入或特定条件生成并执行新的代码逻辑时。本教程将深入讲解如何...
- **循环语句**:for、while和do-while循环用于重复执行一段代码,直到满足特定条件为止。初学者在学习这些文件时,可能会看到如何运用这些循环结构。 3. **方法(Methods)** - 在Java中,方法是一组完成特定...
在IT行业中,动态生成、编译以及运行Java文件是一项重要的技术,它允许程序在运行时创建新的Java代码并执行。这种技术广泛应用于元编程、插件系统、代码自动生成等场景,极大地提高了软件的灵活性和可扩展性。下面将...
3. 方法:用于封装一段可重复使用的代码,通过调用来执行。 4. 异常处理:Java的异常处理机制(try-catch-finally)帮助程序在出现错误时进行恢复或记录错误信息。 三、Eclipse环境 Eclipse是一款强大的开源集成...
- **循环语句**:for,while,do-while用于重复执行一段代码。 - **跳转语句**:break和continue用于提前结束循环或跳过当前循环迭代。 8. **数组**: 数组是存储同一类型元素的集合。在Java中,你可以声明并...
总结,"五子棋--Java代码在Eclipse中运行"项目展示了如何利用Java语言和其GUI工具开发一款桌面游戏。它涵盖了图形界面设计、事件处理、游戏逻辑等多个编程知识点,对于学习Java编程和游戏开发的初学者来说,这是一个...
3. **JavaME教程**:这表明代码可能被设计为教学材料,帮助初学者逐步学习JavaME编程,每段代码都对应一个特定的教学点。 至于“简体版代码”,这可能意味着代码注释和文档是用简体中文编写的,适合中文用户阅读和...
在 Java 中,实现等待所有子线程结束后再执行一段代码是非常重要的,因为它可以确保主线程等待所有子线程完成任务后再继续执行。这篇文章将详细介绍 Java 实现等待所有子线程结束后再执行一段代码的方法。 ...
Java运行时动态编译是Java语言的一个重要特性,它使得Java程序在运行过程中可以对代码进行优化和调整,极大地提高了程序的性能。这个特性主要得益于Java的Just-In-Time (JIT) 编译器,它是Java虚拟机(JVM)的一部分...
当我们谈论"Java事务"时,我们通常指的是在多条SQL语句执行过程中保持数据完整性的一种方法。以下是一个简化的Java事务处理代码示例,适用于初学者理解和学习。 首先,我们需要了解Java中的JDBC(Java Database ...
Java Web动态网站是一种基于Java技术构建的互联网应用程序,它能够为用户提供交互式的、内容更新实时的网络服务。这个课程设计适合初学者入门,通过学习,你可以掌握如何利用Java Web技术来开发动态、功能丰富的网站...
这段代码会创建一个Perl解释器实例,执行打印"Hello, World!"的Perl语句,然后清理资源。 **交互与数据传递** JERL不仅支持运行Perl脚本,还允许Java和Perl之间进行数据交换。你可以通过`perl.setVariable("varName...