Java作为Java的脚本语言?

New*_*ger 14 java scripting performance jvm

是否可以使用Java作为Java的脚本语言?或者也许以某种方式在运行时将java脚本编译成java二进制文件?我确实试过搜索但除了一些黑客之外找不到任何全面的东西......

我有使用其他语言的经验,例如对于C#我使用lua非常方便,但现在我需要实现最大的性能,因为脚本的调用大约是每帧1.000.000.

所以我认为将java本身作为java程序的脚本语言,应该为我提供最好的性能和兼容性.

有什么建议?

Bri*_*new 8

BeanShell是Java的常用脚本解决方案.它是一种类似Java的脚本语言.

存在使用Java基础结构和JVM但使用不同语言的其他解决方案.例如Scala,Groovy和Jython(兼容Java的Python).所有这些重要的事情是它们将与使用标准Java创建的Java库互操作,因此您可以轻松地使用(比如说)Scala来驱动您的Java语言创建的解决方案.

以上都提供了REPL(read-eval-print-loop),因此您可以在动态命令行环境中导入,实例化和与对象交互.这对于测试和原型设计交互以及测试脚本非常有用.


Pet*_*rey 7

您可以使用BeanShell,但Groovy,XTend和Scala可能会做出更好的选择.

  • 从链接我引用一下:"Groovy是在Java虚拟机(JVM)上运行,可以在很大程度上被看作是一个Java超通用脚本语言." (3认同)

fxm*_*asa 6

Java 11 支持无需编译即可运行源代码。

HelloWorld.java对于包含以下内容的文件

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello World!!!");
  }
}
Run Code Online (Sandbox Code Playgroud)

你可以跑

java HelloWorld.java

执行代码。有一个限制:所有类必须在同一个文件中定义。

如果文件没有.java扩展名,则需要包含--source选项。

例如,对于HelloWorld包含源代码的文件,您需要运行

java --source 11 HelloWorld

要直接在 shell 中运行 java“脚本”,您可以使用

#!/usr/bin/java --source 11

public class HelloWorld {
  public static void main (String[] args) {
    System.out.println("Hello World")
  }
}
Run Code Online (Sandbox Code Playgroud)

其中/usr/bin/java是二进制路径java


Per*_*ion 5

答案是'是',您可以在Java程序本身中使用Java作为脚本语言.此外,还有其他几种语言也可用于此目的 - Javascript,LUA,Groovy,Ruby,列表很长.通过引入javax.scripting API,集成变得更加容易,javax.scripting API标准化并大大简化了将第三方脚本语言集成到Java程序中的过程.我强烈建议您阅读有关Oracles页面的API和一些教程.

http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html


Jac*_* Cz 5

从版本 7.0 开始,Java 对运行时编译提供了“官方”支持(如果 SDK 中的 tools.jar 位于类路径中)。大概执行速度可以和编译java一样高,比解释器还快。

阅读的起点(互联网上的许多示例):

import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;


JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
if(compiler!=null) {
    .... 
}
Run Code Online (Sandbox Code Playgroud)