为什么以及如何使用JShell?

nau*_*uke 7 java read-eval-print-loop java-9 jshell

我经历了几个关于JShell的教程,我仍然不了解最重要的部分:为什么我甚至会使用JShell?

这就是Oracle所说的:

"您可以测试单个语句,尝试不同的方法变体,并在JShell会话中尝试不熟悉的API".

是的,很棒,但对于所有这些事情,我可以使用IDE.我明白,REPL应该能够更快地进行代码评估.但是,在带有Sysout的虚拟Hello World项目中在IDE中测试一段代码肯定不会慢一些?

事实上,IDE提供自动完成,早期检测错误,我可以通过鼠标点击检查方法/类的实现.这一切都应该使IDE中的代码测试比JShell更快?

我错过了什么?有人可以给我一些用例,使用JShell比使用IDE更好吗?你们是如何使用JShell的?

Nam*_*man 6

尽管我真的鼓励您继续阅读Java Shell的动机和目标。

但是,只要稍作动手就可以回答您的问题,实际上,我很高兴知道在IDE上尝试该操作所花费的时间和遵循的步骤。所以,只有少数几个,您可以开始:-

1.最近,我知道Java 9引入了用于集合的重载的“便利工厂方法”,然后对它们的作用以及如何使用它们感到好奇。

脚步

-> Type 'jshell' on command prompt (assuming JAVA_HOME is set to JDK9's bin)
-> Type 'List.o'
-> Press Tab (completes the `of`) 
-> Tab displays all signatures 
-> Tab starts reading the documentation from first
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

2.如何保留代码的语法?如果您在上图中注意到,的初始化List甚至都不必关心存储在其中的变量,终止分号等。

3.您多快能发现要实现的某些代码引发的异常?因此,在这里的一个用例中,我想创建一个MapString(水果的名称)到String(它们的颜色),然后在以后的阶段中添加更多水果,并忽略那些我不确定的颜色。然后最终获得所有红色水果的清单。当然,由于这些天我在学习Java 9,因此我将尝试使用与Java9一样多的API。

在此处输入图片说明

在尝试在IDE中添加所有(^^)代码的同时,您自己可以注意到最终需要花费时间来实现不可变映射静态工厂方法的所有这些特征

PS

  • Robert 在这里介绍了Jshell,它详细说明了JShell如何有效。

  • 在完成上述所有操作时,请记住,成为IDE并不是Jshell的目标。

  • 通常,所有这些操作都会绕过“代码->编译->执行”循环的编译阶段,对语言进行简单的实验。

  • 非常感谢您提供非常详细的答案!我将检查您提供的链接。我确实在JShell和IDE中都尝试了您的代码段。对我来说大约花了 两种情况下的时间相同。使用** JShell **可以节省时间:将所有内容自动保存到一个临时变量中,无需键入';',无需手动编译和运行。带有** IDE **的时间节省功能:非常强大的自动完成功能,更易于代码导航和编辑。在JShell和IDE中,我可以快速轻松地访问文档。PS我确实知道,JShell不能替代IDE。 (2认同)