Java的交互式外壳式ipython

Java的交互式外壳式ipython,java,shell,Java,Shell,我对Java非常陌生,希望使用交互式shell学习Java,就像我使用IPython学习Python一样 我尝试了一些交互式shell,例如beanshell、jython、jythonconsole和JyConsole。他们中的大多数人没有像IPython那样完成制表符。有没有类似ipythonforjava的东西?你用过什么beanshell?老的那个? 看看 他们声称提供了完整性交互式地使用java可能没有多大用处,因为java语言非常面向编译。最好的方法可能只是获得一个好的IDE,比如,

我对Java非常陌生,希望使用交互式shell学习Java,就像我使用IPython学习Python一样


我尝试了一些交互式shell,例如beanshell、jython、jythonconsole和JyConsole。他们中的大多数人没有像IPython那样完成制表符。有没有类似ipythonforjava的东西?

你用过什么beanshell?老的那个? 看看
他们声称提供了完整性

交互式地使用java可能没有多大用处,因为java语言非常面向编译。最好的方法可能只是获得一个好的IDE,比如,并开始使用断点和调试器。

我认为我找到了一个足够好的替代方法:JPype。JPype允许python程序完全访问java类库。使用JPype和IPython,我可以使用所有java函数,同时为java类提供非常好的制表符完成。导入类后,如果您想使用java的交互式选项,请尝试使用Dr java或JGrasp,它们都提供与IDLE for python相同的交互式选项,加上作为一个完全基于IDE的调试器,我更喜欢JGrasp而不是Dr Java。他们也有Dr Python,所以如果您习惯了Dr Java,您也可以将其与Python一起使用

另外,DrJava还有一个特性,您可以从初学者、中级、高级和完整Java中进行选择,以限制您在学习该语言时可以使用该语言。我从来没有使用过这个功能,因为我不认为限制语言的某些部分有什么意义,但我想有些老师在教学生时会使用它。

尽管我同意MacGuy的说法: 最好的方法可能只是得到一个好的IDE,比如eclipse 因为我也来自于像交互式shell这样的工具非常重要的环境。所以我也可以建议您简单地使用像directfrom/JPype这样的工具

通过jython的i-freaker建议可以实现或使用:

让jython检查其正在运行的jython-c“导入操作系统”;打印Python符合%s%os。名称' 获取readrline以防Mac sudo端口安装readline 使java readline正常工作的步骤 因此,jython的readline by now在jython结果中使用Ctrl+R进行反向i-search,就像您从shell中知道的一样。为了像你知道的那样完成制表符,从ipython fallow开始 应该是这样!如果您需要ipython 0.10的补丁,您可以。 groovysh:

得益于JLine,丰富的跨平台编辑行编辑、历史记录和完成功能。 ANSI颜色提示、异常跟踪等。 简单而健壮的命令系统,具有在线帮助、用户别名支持等功能。 用户配置文件支持
看看你可以为IPython安装Java内核并通过笔记本使用它。

Gayan Weerakutti在评论中也提到了我认为正确的答案: JShell自版本9以来就是JDK的一部分。 在终端上尝试jshell。
查看。

IntellijIDEA有一个带有制表符完成功能的groovy控制台


打开它:Tools->groovyconsole…

+1,因为我不确定是否存在这样的shell,但它会很有用。在我花点时间阅读第二段之前,我几乎发布了BeanShell。JShell是自Java9以来JDK的标准组件。试着在终端上运行$jshell。实际上我经常使用Beanshell,最近是Beanshell2。然而,我并没有发现代码完成的多样性,我并不是说以交互方式使用Java是不可能的,甚至是无用的。我已经使用和享受了一些C++解释器的各种任务。但由于这些语言在设计时没有考虑到这种用途,因此您无法获得与python等更具交互式的面向语言相同的实用性。如果您尝试beanshell,它将java扩展为更像脚本语言的语言,您不必声明变量类型。闭包还有很多优点,但我刚刚开始使用它。公平地说,Python也是一种OO语言,iPython等人的工作非常出色。我会同意,不必像iJava那样指定你的类型,这是更方便的,但这并不是交互shell不能工作的原因。你应该用EntLyJ替换Eclipse。我现在使用Eclipse而不是NETBeA,因为我也在编码其他语言,如Python和C++。我只是使用了来自美国的beanshell