92

有没有类似 python 的交互式 REPL 模式,但对于 Java ?这样我就可以,例如,InetAddress.getAllByName( localHostName )在一个窗口中输入,并立即得到结果,而无需所有这些 public static void nightmare() 东西?

4

29 回答 29

64

编辑 从 Java 9 开始就有JShell

原始答案如下

您还可以使用Groovy 控制台。它是一个交互式控制台,您可以在其中做您想做的事。由于 Groovy 还包括来自核心 Java 平台的类,因此您也可以使用这些类。

它看起来像这样:

Groovy 的截图

于 2008-12-29T11:04:14.607 回答
52

Eclipse 有一个特性可以做到这一点,尽管它不是一个循环。它被称为“剪贴簿页面”。我假设这个类比应该是你有一个剪贴簿,你可以在其中收集一些代码片段。

无论如何,要使其工作,请在 Eclipse 中打开一个项目(您的剪贴簿页面将与一个项目相关联——当项目拥有东西时,Eclipse 喜欢它)。

然后:

  1. 在项目导航器窗口中,选择项目中某处存在的文件夹。
  2. 选择菜单文件 -> 新建 -> 其他,或按 Control-N。
  3. 选择 Java -> Java 运行/调试 -> 剪贴簿页面。
  4. 点击“下一步”,然后给它一个文件名,然后点击“完成”。

现在你有一个剪贴簿页面。键入一些代码,例如:

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

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

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

于 2009-08-14T17:03:07.573 回答
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

于 2010-04-14T08:58:31.560 回答
19

您可以使用 Eclipse 剪贴簿页面。

在 Eclipse 中创建一个剪贴簿页面。在您的项目中,新建-> 其他-> 剪贴簿页面。

在文件中,输入一些文本,选择它并按 ctrl-U,然后就可以了。

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

于 2011-09-06T10:22:51.140 回答
19

老问题,但现在有一个更好的答案(2013 年 5 月)——java-REPL!它可以在github上获得,也可以在java-repl 网站上实时获得,以进行快速的一次性测试。

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

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

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

于 2013-05-16T21:16:30.347 回答
13

似乎还没有人提到 Java (6, 7) 提供了一个名为jrunscript. 它与语言无关(因此可以与 Jython、JRuby 等一起使用)。它默认为默认捆绑的 JavaScript (Rhino),并且与其他语言一样,您可以访问类路径上所有可用的包/对象。

于 2012-10-08T22:02:34.277 回答
12

它是 OpenJDK 9 的一部分!

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

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

JShell 的屏幕截图

资源

于 2015-05-06T07:58:08.353 回答
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])
于 2008-12-29T11:00:13.960 回答
11

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

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

于 2008-12-29T12:09:47.410 回答
9

Albert Latacz的 Java-REPL运行良好。

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

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

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

于 2013-11-21T13:53:07.113 回答
8

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

于 2008-12-29T11:11:19.523 回答
7

groovy 控制台允许您这样做。它实际上是为了尝试和测试 groovy 代码,但由于 groovy 是 Java 的超集,它也允许使用普通的 Java 代码。

我刚刚在控制台中输入了这个:

InetAddress.getAllByName('localhost')

并按 CTRL-R,然后它返回:

groovy> InetAddress.getAllByName('localhost')

Result: [localhost/127.0.0.1]
于 2008-12-29T11:09:48.387 回答
7

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

java.net.InetAddress.getAllByName("localhost")
于 2008-12-29T13:49:34.040 回答
6

虽然JRubyBeanShellJulian Fleischer 的 REPL都在那里,但Albert Latacz 的 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);
于 2013-04-12T02:48:30.030 回答
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 的教程。

于 2009-03-30T15:36:31.737 回答
2

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

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

从外壳内加载其他罐子。

几年前我曾经使用 Jython 来满足您的要求。作为构建脚本的一部分,我生成了一个自定义 jython.bat 和 .py 文件,其中包含我正在处理的项目的完整类路径。这样,当我启动 Jython 时,它就会拥有所有可用的代码,并且它会启动 Spring 让我在实时系统中处理事情。你可以用 Groovy、JRuby、BeanShell 等做同样的事情。

于 2010-04-14T13:56:14.100 回答
2

您可以使用 jruby http://kenai.com/projects/jruby/pages/CallingJavaFromJRuby编写 java 脚本

于 2010-09-09T01:34:07.237 回答
2

是的,有:http ://www.scravy.de/blog/2012-02-27/a-read-eval-print-loop-for-java.htm

于 2012-10-08T20:52:14.377 回答
1

大多数 IDE 都有一个类似于“即时模式”的窗口,可以让您即时评估 Java 代码。

于 2008-12-29T10:57:47.693 回答
1

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

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

于 2009-10-23T01:11:10.753 回答
1

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

还有一个 Eclipse 插件,但它对我不起作用。我想它只是有一段时间没有更新了。所以我通常做的是为“如果我这样做会发生什么”问题打开一个 DrJava 窗口。

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

于 2011-04-29T20:24:45.433 回答
1

豆壳 2

于 2012-03-01T03:22:04.367 回答
1

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

于 2013-10-31T18:22:59.930 回答
1

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

输入更多以达到字符限制...

于 2016-02-05T19:12:11.077 回答
1

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

nudge4j java repl

...而且美妙之处在于您可以从浏览器中试用您的应用程序

于 2016-06-30T09:17:10.960 回答
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>

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

在此处输入图像描述

于 2016-08-12T08:52:05.607 回答
1

Java 9 提供了 JShell。

jshell> println( "Print me!")
jshell> Print me!
于 2017-09-14T12:55:17.983 回答
0

Jython、JIRB for JRuby、Groovy (groovyconsole et al) 和 Beanshell 都是可行的选择。

我用过InteractiveConsoleJython,它在应用程序中运行良好。

于 2010-04-14T17:58:55.150 回答
0

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

于 2020-12-25T05:41:15.390 回答