例如,如果你不想每次都使用System.out.println打印东西,那么你可以打开PRINTING文件,该文件定义了许多快捷方法,其中有一个名为print。
jshell> /open PRINTING jshell> print("hello") hello 常见和有效的用法为了充分利用JShell,你应该了解其中一些常见和有效的用法。
JShell特别适合于以下场景:
学习和提升Java语言知识;
探索或发现JDK内外的新API;
快速原型化想法或概念。
用JShell学习对于Java,我们都有可以提高的地方。不管是泛型,还是多线程,JShell都是一个非常有效的学习工具。
JShell之所以会成为一个很棒的学习工具是因为它提供了一个持续不断的反馈循环。你输入一个命令,它告诉你结果。就是这么简单。而且,虽然很简单,但很有效。像俗话说的那样,它让你可以“快速行动,推陈出新”。
用JShell发现或探索Java语言不断发展和增加新API(比过去任何时候都快)。
例如,考虑下Java 8中引入的Streams API。这是JDK的一个重要补充。有许多东西需要探索。但是,在Java 8中,Streams API还不完善。Streams API是一个处于不断演化中的API,Java 9 和Java 10都添加了新特性和功能。
下次,你想要探索Java的新特性时,可以考虑使用JShell。
用JShell快速创建原型我们都会遇到原型化想法的情况。在那些情况下,你通常发现自己在创建一个新的测试项目,编写JUnit测试,或者编写一个具有main方法的简单Java类。有点仪式化,实际上有点麻烦!
JShell是一个非常有效的测试新想法的工具。你不必编写单元测试,或者是具有main方法的简单Java类,你可以使用JShell,借助命令行,或者/open命令和一个预先编写好的文件。借助JShell,下面这些事情你就不需要做了:
编译代码;
给类和文件起一样的名字;
准备多个源文件或嵌套类/内部类。
总之,所有这些都相当于加速了“想法转化”。
JShell使用技巧 命令行使用技巧JShell使用JLine2驱动命令行。这相当于Java中的GNU ReadLine,使你可以编辑或浏览在命令行上输入的命令。所有现代化的shell,如Bash,都使用它(这就是你为什么不能使用CTRL-V在shell中粘贴)。这就是说,JShell有一些非常强大的“快捷方式”。
以下是其中最常用的一些:
CTRL-A——把光标移到当前行的开头;
CTRL-E——把光标移到当前行的结尾;
ALT-F——向前移动一个单词;
ALT-B——向后移动一个单词;
CTRL-K——剪切到行尾;
CTRL-U——剪切至行首;
CTRL-W——剪切把光标前的单词;
CTRL-Y——粘贴剪贴板中的最后一项;
CTRL-R——向后搜索历史记录;
CTRL-S——向前搜索历史记录。
类路径使用技巧在加载外部类库时,如果要输入完整的路径会非常恼人。因此,你可以把当前路径改成所有外部类库所在的路径,从那个目录启动jshell,使用星号(用引号引起来)包含所有的jar包。这适用于所有操作系统。
$ jshell --class-path "*"同样的命令也适用于路径。该命令同样适用于所有的操作系统。
$ jshell --class-path "libs/*"还有一个不错的建议:如果你已经输入了若干命令,但启动时忘了设置类路径,那么你可以使用/env命令设置类路径。
jshell> /env --class-path foo.jar | Setting new options and restoring state. 节省时间的技巧对于JShell,你可以维护一个常用类库、命令或片段的专用目录,从而节省大量的时间。
对于新手,你可以从我GitHub上的示例库生成分支。
那个库包含如下几个目录:
imports
libs
startups
utils
让我们逐个看一下。
Imports
该目录包含预先定义好的常用导入。
随着使用JShell越来越多,你会发现,在想要使用或试验一个特定的外部类库时,重新输入一堆导入语句会变得非常痛苦。
为此,你可以把所有必要的导入语句保存到一个文件中,然后利用/open命令把它们引入进来。
定义导入文件的粒度由你决定。你可以选择针对每个库定义(例如guava-imports)或针对每个项目定义(例如my-project-imports),或者其他最适合你的方式。
jshell> /open imports/guava-imports jshell> /imports (shortened for brevity) | import java.util.stream.* | import com.google.common.collect.*Libs