有没有像python的交互式REPL模式,但对于Java?

时间:2008-12-29 10:56:12

标签: java read-eval-print-loop

是否有像python的交互式REPL模式,但对于Java? 例如,我可以在一个窗口中输入InetAddress.getAllByName( localHostName ),并立即获得结果,而没有所有这些公共静态void nightmare()的东西?

29 个答案:

答案 0 :(得分:62)

修改 从Java 9开始,有JShell

原始答案如下

您也可以使用Groovy Console。它是一个交互式控制台,您可以在其中执行所需操作。由于Groovy还包含来自核心java平台的类,因此您也可以使用这些类。

看起来像这样:

Screenshot of Groovy

答案 1 :(得分:52)

Eclipse有一个功能,虽然它不是一个循环。它被称为“剪贴簿页面”。我假设这个类比应该是你有一个剪贴簿,你可以收集一小段代码。

无论如何,为了使它工作,在Eclipse中打开一个项目(你的Scrapbook Page将与一个项目相关联 - 当项目拥有东西时Eclipse喜欢它。)

然后:

  1. 在项目导航器窗口中,选择项目中某处的文件夹。
  2. 选择菜单文件 - >新 - >其他,或点击Control-N。
  3. 选择Java - > Java Run / Debug - >剪贴簿页面。
  4. 点击“下一步”,然后给它一个文件名,然后点击“完成”。
  5. 现在你有一个剪贴簿页面。输入一些代码,就像这样:

    System.out.println(System.getProperties());

    然后用鼠标选择文本,然后按Control-U或从上下文菜单中选择“执行”。代码将运行,输出将显示在控制台上。

    您还可以键入表达式,选择它,然后从上下文菜单中选择“显示”。它将评估表达式并打印其类型。例如,在1 + 2上运行展示位置会打印(int) 3

答案 2 :(得分:28)

  

BeanShell是一个小型,免费,可嵌入的Java源代码解释器,具有用Java编写的对象脚本语言功能。 BeanShell动态执行标准Java语法,并使用常见的脚本编写方便性扩展它,例如松散类型,命令和方法闭包,如Perl和JavaScript中的那些。   您可以交互式地使用BeanShell进行Java实验和调试,以及以新的方式扩展应用程序。脚本Java适用于各种各样的应用程序,包括快速原型设计,用户脚本扩展,规则引擎,配置,测试,动态部署,嵌入式系统,甚至Java教育。

http://www.beanshell.org/

http://www.beanshell.org/manual/syntax.html#Standard_Java_Syntax

答案 3 :(得分:19)

老问题,但现在有一个更好的答案(2013年5月) - java-REPL!它可以在github上找到,也可以在java-repl website直播,以便快速进行一次性测试。

如果您获取git hub代码并运行ant来生成工件,您可以使用以下小脚本轻松使用:

#!/bin/sh
java -jar /home/rdahlgren/scripts/javarepl-dev.build.jar

自从找到这个项目后,我可能每天使用它5次。享受!

答案 4 :(得分:19)

您可以使用Eclipse Scrapbook页面。

在Eclipse中创建一个Scrapbook页面。在您的项目中,New-> Other-> Scrapbook page。

在文件中输入一些文字,选择它并点击ctrl-U,然后你去。

要管理导入,请右键单击页面并选择“设置导入”,您可以在其中选择导入包或单个类。这是持久的,并随页面一起保存。

答案 5 :(得分:13)

似乎没有人提到Java(6,7)带有一个名为jrunscript的REPL控制台。它与语言无关(因此可以与Jython,JRuby等一起使用)。它默认为JavaScript(Rhino),默认情况下也捆绑在一起,与其他语言一样,您可以访问类路径中可用的所有包/对象。

答案 6 :(得分:11)

Jython是一个python实现,它允许您检查Java对象并与之交互。

>>> from java.net import *
>>> InetAddress.getAllByName("google.com")
array(java.net.InetAddress,[google.com/209.85.171.100, 
                            google.com/74.125.45.100,
                            google.com/74.125.67.100])

答案 7 :(得分:11)

它是OpenJDK 9的一部分!

一个名为 JShell 的REPL(由Oracle开发)已作为JDK 9的一部分发布。

只需下载JDK 9,然后启动bin/jshell

Screen shot of JShell

资源

答案 8 :(得分:11)

作为Groovy的替代方案,请尝试Beanshell:http://www.beanshell.org/

它更像Java,允许您直接使用Java语法。

答案 9 :(得分:9)

Albert Latacz的Java-REPL效果很好。

您可以直接在浏览器中尝试: http://www.javarepl.com/term.html

这里有源代码,它有一个不错的Intelli-J插件。

https://github.com/albertlatacz/java-repl

答案 10 :(得分:8)

Clojure提供了一个可以使用的REPL。

答案 11 :(得分:7)

Scala还提供了一个交互式控制台。通过完全限定InetAddress,我能够使用它来获得问题中表达式的结果,如:

java.net.InetAddress.getAllByName("localhost")

答案 12 :(得分:7)

groovy console允许您这样做。它实际上是试图测试groovy代码,但由于groovy是Java的超集,它也允许普通的Java东西。

我刚进入控制台:

InetAddress.getAllByName('localhost')

然后点击CTRL-R,然后返回:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]

答案 13 :(得分:6)

虽然JRubyBeanShellJulian Fleischer's REPL Albert Latacz's REPL似乎是最新且活跃的。

使用简单的类定义尝试它,工作正常。

$ java -jar javarepl.jar
Welcome to JavaREPL version 56 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_17)
Type in expression to evaluate.
Type :help for more options.

java> public class Test {
    | public static void execute(String [] s) {
    |  System.out.println(54353 + s[0]);
    | }}

java> Test.execute(new String [] {"234343"});
54353234343

java> System.exit(0);

答案 14 :(得分:3)

对于可以访问Mathematica的人,JLink允许您使用Mathematica代码访问Java和脚本:

Needs["JLink`"]
LoadJavaClass["java.net.InetAddress"]
InetAddress`getAllByName["localhost"]

点击Shift-Enter进行评估,然后获得

{<<JavaObject[java.net.Inet4Address>>}

然后你可以使用Mathematica的Map函数在返回的对象上调用toString

#@toString[]& /@ %

获取结果(或使用不那么模糊的语法,Map[Function[obj, obj@toString[]], %]):

{"localhost/127.0.0.1"}

如果你开始认真对待这个问题,你会想要在http://reference.wolfram.com/mathematica/JLink/tutorial/Overview.html阅读Todd Gayley的教程。

答案 15 :(得分:2)

如果您已经知道Groovy(我假设您这样做,因为您提到了Groovy控制台),那么只需使用Groovy发行版中包含的groovysh或groovyConsole。如果您有要导入的自定义jar,您可以编写一个批处理文件,启动groovysh / groovyConsole,并添加到类路径中。你也可以这样做

this.class.classLoader.rootLoader.addURL(new URL("file:///path to file"))

从shell中加载其他jar。

几年前,我曾经使用过Jython做你正在问的问题。作为构建脚本的一部分,我生成了一个自定义的jython.bat和.py文件,其中包含我正在处理的项目的完整类路径。这样当我开始使用Jython时,它将拥有所有可用的代码,并且它会让Spring在现场系统中转动。您可以使用Groovy,JRuby,BeanShell等执行相同的操作。

答案 16 :(得分:2)

您可以使用jruby http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby

编写脚本java

答案 17 :(得分:2)

答案 18 :(得分:1)

Java 9提供了JShell。

jshell> println( "Print me!")
jshell> Print me!

答案 19 :(得分:1)

JPad是一个带内置REPL的java暂存器:

C:\>jpad
       _ _____          _
      | |  __ \        | |
      | | |__) |_ _  __| |
  _   | |  ___/ _` |/ _` |
 | |__| | |  | (_| | (_| |
  \____/|_|   \__,_|\__,_|



Anything you type is evaluated as java.
The code is continuously appended until you call \clear.
Other Available Commands:
\exit - exit
\clear (n) - clear past java statements
\history - display all past java statements
\help - display this help

j>2+2
4
j>Math.sin(100.1)
-0.4177477
j>

转储集合,列表,地图等也很聪明,并允许将它们呈现为表格或图表:

enter image description here

答案 20 :(得分:1)

对于java 8,有nudge4j。 见https://github.com/lorenzoongithub/nudge4j

nudge4j java repl

...而且美妙之处在于你可以从眉毛中试用你的应用程序

答案 21 :(得分:1)

有一个在线REPL:http://www.javarepl.com/console.html

键入更多内容以达到字符数限制......

答案 22 :(得分:1)

DrJava是一个包含REPL窗格的教育IDE。

还有一个Eclipse插件,但它对我没用。我认为它暂时没有更新。所以我通常做的是保持一个DrJava窗口打开“如果我这样做会发生什么”的问题。

EclipseShell可能也不错,但我还没有使用它。

答案 23 :(得分:1)

有一个名为DrJava的简单IDE,它有一个Interactions控制台。它完全像我期望的那样工作。只需加载文件并开始与其中的对象进行交互。

答案 24 :(得分:1)

答案 25 :(得分:1)

大多数IDE都有一个名为“立即模式”的窗口,可以让你动态评估java代码。

答案 26 :(得分:1)

您可以查看BlueJ这是一个交互式Java开发环境,用于教授OOP而不是像Eclipse或NetBeans这样的完整IDE。无论如何,玩一场比赛都很有趣。

您可以在一系列Java教程中的YouTube上看到它。

答案 27 :(得分:0)

JRyy的Jython,JIRB,Groovy(groovyconsole等人)和Beanshell都是可行的选择。

我已经将InteractiveConsole用于Jython,它在应用程序中运行得非常好。

答案 28 :(得分:0)

自 2018 年 9 月发布的 JDK 11 以来,java 命令允许启动单个 Java 源代码文件。查看错误报告 8192920JEP 330