输出会包含任何启动代码(稍后详细介绍)以及任何有效或无效的片段。JShell会根据片段的类型给每个片段ID添加一个前缀。下面是快速确定其意义的方法:
s:片段ID以s开头的是启动代码。
e:片段ID以e开头的产生了错误。
片段ID没有前缀的是有效片段。
Vars、Methods、Types、Imports和Reset命令JShell提供了多个命令帮助你查看shell的当前状态或上下文。它们都有恰当的名称,而且简单易懂,但是完备起见,我们把它们都列在这里。
你可以使用/vars查看声明的所有变量和它们的值。
jshell> /vars | String greeting = "hello" | String audience = "world" | String saying = "helloworld"你可以使用/methods命令列出声明的所有方法和它们的签名。
jshell> /methods | String getRandomAudience(List<String>) | String getRandomAudience()你可以使用/types命令列出所有类型声明。
jshell> /types | class Foo你可以使用/imports命令列出���前声明的所有导入。
jshell> /imports | import java.io.* | import java.math.* | import java.net.* (shortened for brevity)最后,你可以使用/reset命令重置和清理包括变量、方法和类型在内的所有状态。
jshell> /reset | Resetting state. jshell> /vars (no variables exist after reset) Edit命令/edit用于编辑之前输入的片段。Edit命令适用于所有类型的片段,包括有效的、无效的和启动片段。它特别适合编辑产生了错误的多行代码,使你不必重新输入任何东西。
在上文中,当把变量greeting和audience串联成变量saying时,“hello”和“world”之间少了个空格。你可以通过输入/edit和片段ID来编辑。JShell Edit Pad会弹出来,你可以根据需要做任何修改。你还可以使用变量名称代替片段ID。
jshell> /edit 3 (... new JShell Edit Pad window opens ...) jshell> /edit saying (... new JShell Edit Pad window opens ...)编辑完成后,你可以点击Accept按钮,JShell将对编辑后的片段重新求值。如果重新求值发现片段没有包含任何错误,则给编辑后的片段赋予一个新的片段ID。
你还可以给/edit 传入一个范围或多个ID,一次编辑多个片段。
jshell> /edit 1-4 (... new JShell Edit Pad window opens with snippets 1 through 4 ...) jshell> /edit 1 3-4 (... new JShell Edit Pad window opens with snippets 1 and 3 through 4 ...) Drop命令/drop用于删除之前的任何片段。
除了编辑行,你还可以选择使用/drop命令删除它。它的用法和edit命令一样,你可以使用片段ID、变量、范围或者它们的组合作为参数。
jshell> /drop 3 | dropped variable $3 jshell> /drop saying | dropped variable saying jshell> /drop 3-4 | dropped variable saying | dropped variable $4 Save命令/save使你可以把之前输入的片段的输出保存到一个文件。
除了保存输出的文件,/save命令还接收另外的参数,用于指定需要保存的片段ID。该参数的用法和/edit及/drop命令的一样,位于文件名参数之前。
如果未指定任何片段ID,则保存之前输入的所有片段。
jshell> /save output.txt jshell> /save 3-4 output.txt/save和/open命令(下文介绍)搭配使用会非常有用,可以用于保存当前会话,并稍后恢复。要保存当前会话,包括所有的错误,调用/save命令,传入参数-all。
jshell> /save -all my_jshell_session.txt Open命令/open命令可以打开之前保存的任何输出,并对其重新求值(包括错误!)
jshell> /open my_jshell_session.txt为方便使用,JShell还提供了一些预定义的“文件名”:
DEFAULT——包含默认导入片段的文件;
PRINTING——包含若干预定义打印方法的文件;
JAVASE——包含所有Java SE程序包导入的文件。