JShell 终于要讲解完了,作为倒数第二章节,我们来讲讲 JShell 中的脚本 ( Script )。
首先,我们先来看看什么是 JShell Script 。
按照官方给的定义,一个 JShell Script 是放在文件中的一系列代码片段和 JShell 命令,其中每个代码片段或命令独占一行。
JShell 脚本可以一个本地文件,也可以是以下预定义的文件之一:
脚本名称 | 脚本内容 |
---|---|
DEFAULT | 包含了通用的导入 ( import ) 声明,这是一个默认脚本,如果没有指定其它启动脚本,则会默认使用它 |
PRINTING | 定义了一个打印脚本,会把所有输入输出重定向到 PrintStream 类中的 print 、println() 和 printf 方法 |
JAVASE | 会导入 java.se 模块中定义的 Java SE 核心 API。因为 java.se 模块中的包数量太多,使用这个脚本可能会导致启动延时 |
JShell 启动脚本
启动脚本包含了启动 JShell 会话时加载的代码片段和命令。默认的启动脚本会包含常见的 import
语句。我们也可以根据需要创建自定义脚本。
JShell 每次重置时都会再次重新加载启动脚本。重置则一般发生在 JShell 启动时或者执行了 /reset
、/reload
和 /env
命令。
如果我们在启动 JShell 时未使用任何其它脚本,那么会默认使用启动脚本 DEFAULT
。此默认脚本包含了常用的导入声明。
注意
根据 Java 语言定义,会自动导入
java.lang
包,因此该不需要显式导入。
在 JShell 启动后,我们可以使用 /set start
命令设置启动脚本。
jshell> /set start PRINTING jshell> /reset | 正在重置状态。 jshell>
如果设置的脚本不存在,那么就会报错
jshell> /set start mystartup.jsh | 找不到 '/set start' 的文件 'mystartup.jsh'。
与所有的 /set
命令一样,这个 /set start
命令只在当前会话中有效,退出重进就还原了。为了在下次启动时仍然加载这个启动脚本,我们可以添加 -retain
命令来保存。
通常,在测试启动脚本设置时不使用 -retain
选项,知道调试完毕后,才会使用 -retain
选项保存。
jshell> /set start -retain
这样,下次启动时,就会加载我们刚刚设置的启动脚本。
请注意,在 JShell 运行期间,仅在重置状态时才将启动脚本加载到当前会话中。上面的 -retain
命令只会存储脚本的内容,并不会发生对脚本的引用。这个脚本仅在运行 /set start
命令时才读取。但是,预定义的脚本是通过引用加载的,可以使用 JDK 的新版本进行更新。
启动脚本也可以在 JShell 启动时使用 --startup
选项进行设置,如下面的示例中所示
[yufei@www.twle.cn ~]$ jshell --startup mystartup.jsh
测试启动脚本时,使用 print
等命令输出内容的时候最好不要添加 System.out
前缀。而是使用预定义的PRINTING
脚本访问 print
、println
和 printf
等方法。
对了,启动脚本可以设置多个。也就是我们可以使用 /set start
是设置多个启动脚本,例如下面的范例设置 JShell 启动时同时加载默认导入和打印定义:
[yufei@www.twle.cn ~]$ jshell | 欢迎使用 JShell -- 版本 10.0.2 | 要大致了解该版本, 请键入: /help intro jshell> /set start -retain DEFAULT PRINTING jshell> /exit | 再见 [yufei@www.twle.cn ~]$ jshell | 欢迎使用 JShell -- 版本 10.0.2 | 要大致了解该版本, 请键入: /help intro jshell> println("Hello World!") Hello World! jshell>
-retain
标志用于将这些预定义脚本设置为 JShell 工具的未来会话的启动脚本。设置完毕后,我们可以使用 / set start
不带参数来查看这些启动脚本定义的内容的详细信息。
在启动 JShell 时也可以设置多个启动脚本,而添加方法就是使用多个 --startup
标志
[yufei@www.twle.cn ~]$ jshell --startup DEFAULT --startup PRINTING | 欢迎使用 JShell -- 版本 10.0.2 | 要大致了解该版本, 请键入: /help intro jshell>