Jshell - Java Shell 工具

您可以使用语言 shell 来学习 Java 语言、探索新功能和 API 以及对新代码进行原型设计。

 

介绍 jshell

jshell - 在读取-评估-打印循环 (REPL) 中交互式地评估 Java 编程语言的声明、语句和表达式

 

概要

jshell [options] [load-files]

options 命令行选项,用空格分隔。请参阅 jshell 的选项。

load-files 工具启动时要运行的一个或多个脚本。脚本可以包含任何有效的代码片段或 jshell 命令。

脚本可以是本地文件,也可以是以下预定义脚本之一

DEFAULT 加载默认条目,这些条目通常用作导入。

JAVASE 导入所有 Java SE 包。

PRINTING 将 print、println 和 printf 定义为 jshell 方法,以便在工具内使用。

对于多个脚本,请使用空格分隔名称。脚本按在命令行上输入的顺序运行。命令行脚本在启动脚本之后运行。要启动 jshell 后运行脚本,请使用 /open 命令。

要接受来自标准输入的输入并抑制交互式 I/O,请为 load-files 输入一个连字符 (-)。此选项允许在管道链中使用 jshell 工具。

 

描述

jshell 提供了一种交互式地评估 Java 编程语言的声明、语句和表达式的途径,使学习语言、探索不熟悉的代码和 API 以及对复杂代码进行原型设计变得更加容易。接受 Java 语句、变量定义、方法定义、类定义、导入语句和表达式。输入的代码片段称为代码片段。

输入代码片段时,会对其进行评估并提供反馈。反馈从操作的结果和解释到什么都没有,具体取决于输入的代码片段和选择的反馈模式。无论反馈模式如何,都会描述错误。从详细模式开始,以便在学习工具时获得最多的反馈。

命令行选项可用于在启动 jshell 时配置初始环境。在 jshell 中,可以使用命令根据需要修改环境。

可以从文件加载现有代码片段以初始化 jshell 会话,或者在会话中的任何时间加载。可以在会话中修改代码片段以尝试不同的变体并进行更正。要保存代码片段以供日后使用,请将它们保存到文件。

 

选项

--add-exports module/package 指定要从其定义模块中导出为已导出的包。

--add-modules module[,module...] 指定除初始模块之外还要解析的根模块。

-Cflag 提供一个传递给编译器的标志。要传递多个标志,请为每个需要的标志或标志参数提供此选项的实例。

--class-path path 指定要搜索以查找类文件的目录和存档。此选项会覆盖 CLASSPATH 环境变量中的路径。如果未设置环境变量且未使用此选项,则会搜索当前目录。

  • **Linux 和 macOS**,使用冒号 (:) 分隔路径中的项。
  • **Windows**,使用分号 (;) 分隔项。

--enable-preview 允许代码依赖于此版本的预览功能。

--execution specification 指定备用执行引擎,其中 specification 是 ExecutionControl 规范。有关规范的语法,请参阅 jdk.jshell.spi 包的文档。

--feedback mode 设置响应输入内容提供的初始反馈级别。可以使用 /set feedback mode 命令在会话中覆盖初始级别。默认值为 normal。

以下值对 mode 有效

verbose 为条目提供详细反馈。在操作结果之后显示有关执行操作的附加信息。下一个提示符与反馈之间用空行分隔。

normal 提供平均数量的反馈。下一个提示符与反馈之间用空行分隔。

concise 提供最少的反馈。下一个提示符紧跟在代码片段或反馈之后。

silent 不提供任何反馈。下一个提示符紧跟在代码片段之后。

custom 根据模式的定义方式提供自定义反馈。自定义反馈模式是在 JShell 中使用 /set mode 命令创建的。

--help-h-? 打印标准选项的摘要并退出工具。

--help-extra-X 打印非标准选项的摘要并退出工具。非标准选项可能会在未经通知的情况下更改。

-Jflag 提供一个传递给运行时系统的标志。要传递多个标志,请为每个需要的标志或标志参数提供此选项的实例。

--module-path modulepath 指定在何处查找应用程序模块。

  • 对于 **Linux 和 macOS**,使用冒号 (:) 分隔路径中的项。
  • 对于 **Windows**,使用分号 (;) 分隔项。

--no-startup 阻止启动脚本在 jshell 启动时运行。使用此选项仅运行在启动 jshell 时在命令行上输入的脚本,或者在没有输入任何脚本的情况下,在没有任何预加载信息的情况下启动 jshell。如果使用 --startup 选项,则不能使用此选项。

-q 将反馈模式设置为 concise,这与输入 --feedback concise 相同。

-Rflag 提供一个传递给远程运行时系统的标志。要传递多个标志,请为每个要传递的标志或标志参数提供此选项的实例。

-s 将反馈模式设置为 silent,这与输入 --feedback silent 相同。

--show-version 打印版本信息并进入工具。

--startup file 覆盖此会话的默认启动脚本。脚本可以包含任何有效的代码片段或命令。

脚本可以是本地文件,也可以是以下预定义脚本之一

DEFAULT 加载默认条目,这些条目通常用作导入。

JAVASE 导入所有 Java SE 包。

PRINTING 将 print、println 和 printf 定义为 jshell 方法,以便在工具内使用。

对于多个脚本,请为每个脚本提供此选项的单独实例。启动脚本在 jshell 首次启动时以及使用 /reset/reload/env 命令重新启动会话时运行。启动脚本按在命令行上输入的顺序运行。

如果使用 --no-startup 选项,则不能使用此选项。

-v 将反馈模式设置为 verbose,这与输入 --feedback verbose 相同。

--version 打印版本信息并退出工具。

 

命令

jshell 工具中,使用命令来修改环境和管理代码片段。

/drop {name|id|startID-endID} [{name|id|startID-endID}...] 删除由名称、ID 或 ID 范围标识的代码片段,使其处于非活动状态。对于 ID 范围,请提供用连字符分隔的起始 ID 和结束 ID。要提供列表,请用空格分隔列表中的项。使用 /list 命令查看代码片段的 ID。

/edit [option] 打开编辑器。如果未输入任何选项,则编辑器将打开包含活动代码片段。

以下选项有效

{name|id|startID-endID} [{name|id|startID-endID}...] 使用由名称、ID 或 ID 范围标识的代码片段打开编辑器。对于 ID 范围,请提供用连字符分隔的起始 ID 和结束 ID。要提供列表,请用空格分隔列表中的项。使用 /list 命令查看代码片段的 ID。

-all 使用所有代码片段打开编辑器,包括启动代码片段以及失败、被覆盖或被删除的代码片段。

-start 使用启动时评估的启动代码片段打开编辑器。要退出编辑模式,请关闭编辑器窗口,或者如果在设置编辑器时使用了 -wait 选项,则响应提供的提示符。

使用 /set editor 命令指定要使用的编辑器。如果未设置编辑器,则会按顺序检查以下环境变量:JSHELLEDITORVISUALEDITOR。如果在 JShell 中未设置编辑器,并且未设置任何编辑器环境变量,则会使用简单的默认编辑器。

/env [options] 显示环境设置,或更新环境设置并重新启动会话。如果未输入任何选项,则会显示当前环境设置。如果输入了一个或多个选项,则会按如下方式重新启动会话

  • 使用提供的选项更新环境设置
  • 重置执行状态。
  • 运行启动脚本。
  • 静默地按输入顺序重播历史记录。历史记录包括在 jshell 提示符处、在命令行上输入的脚本或使用 /open 命令输入的脚本中输入的所有有效代码片段或 /drop 命令。

在命令行上输入的环境设置或使用先前的 /reset/env/reload 命令提供的环境设置将保留,除非输入了覆盖该设置的选项。

以下选项有效

--add-modules module[,module...] 指定除初始模块之外还要解析的根模块。

--add-exports source-module/package=target-module[,target-module]* 将 package 从 source-module 导出到 target-module。

--class-path path 指定要搜索以查找类文件的目录和存档。此选项会覆盖 CLASSPATH 环境变量中的路径。如果未设置环境变量且未使用此选项,则会搜索当前目录。

  • 对于 **Linux 和 macOS**,使用冒号 (:) 分隔路径中的项。
  • 对于 **Windows**,使用分号 (;) 分隔项。

--module-path modulepath 指定在何处查找应用程序模块。

  • 对于 **Linux 和 macOS**,使用冒号 (:) 分隔路径中的项。
  • 对于 **Windows**,使用分号 (;) 分隔项。

/exit [integer-expression-snippet] 退出工具。如果未输入任何代码片段,则退出状态为零。如果输入了代码片段,并且代码片段的结果为整数,则结果将用作退出状态。如果发生错误,或者代码片段的结果不是整数,则会显示错误,并且工具将保持活动状态。

/history 显示此会话中的输入内容。

/help [command|subject] 显示有关命令和主题的信息。如果未输入任何选项,则会显示所有命令的信息摘要以及可用主题的列表。如果提供了有效的命令,则会显示该命令的扩展信息。如果输入了有效的主题,则会显示有关该主题的信息。

以下主题值有效

context 描述可用于配置环境的选项。

intro 提供工具的介绍。

shortcuts 描述用于完成命令和代码片段的按键。请参阅输入快捷方式。

/imports 显示当前活动导入,包括来自启动脚本和在启动 jshell 时在命令行上输入的脚本的导入。

/list [option] 显示代码片段及其 ID 的列表。如果未输入任何选项,则会显示所有活动代码片段,但不会显示启动代码片段。

以下选项有效

{name|id|startID-endID} [{name|id|startID-endID}...] 显示由名称、ID 或 ID 范围标识的代码片段。对于 ID 范围,请提供用连字符分隔的起始 ID 和结束 ID。要提供列表,请用空格分隔列表中的项。

-all 显示所有代码片段,包括启动代码片段以及失败、被覆盖或被删除的代码片段。以 s 开头的 ID 是启动代码片段。以 e 开头的 ID 是失败的代码片段。

-start 显示启动时评估的启动代码片段。

/methods [option] 显示有关输入方法的信息。如果未输入任何选项,则会显示所有活动方法的名称、参数类型和返回类型。

以下选项有效

{name|id|startID-endID} [{name|id|startID-endID}...] 显示由名称、ID 或 ID 范围标识的方法的信息。对于 ID 范围,请提供以连字符分隔的起始 ID 和结束 ID。要提供列表,请用空格分隔列表中的项目。使用 /list 命令查看代码片段的 ID。

-all 显示所有方法的信息,包括在启动 JShell 时添加的方法,以及失败、被覆盖或被删除的方法。

-start 显示在启动 JShell 时添加的启动方法的信息。

/open file 打开指定的脚本并将片段读入工具。脚本可以是本地文件,也可以是以下预定义脚本之一

DEFAULT 加载默认条目,这些条目通常用作导入。

JAVASE 导入所有 Java SE 包。

PRINTING 将 print、println 和 printf 定义为 jshell 方法,供工具内部使用。

/reload [options] 重新启动会话,如下所示

  • 使用提供的选项(如果有)更新环境设置。
  • 重置执行状态。
  • 运行启动脚本。
  • 按输入顺序重放历史记录。历史记录包括在 jshell 提示符处输入的所有有效片段或 /drop 命令,以及在命令行上输入的脚本或使用 /open 命令输入的脚本。

在命令行上输入的环境设置或使用先前的 /reset/env/reload 命令提供的环境设置将保留,除非输入了覆盖该设置的选项。

以下选项有效

--add-modules module[,module...] 指定除初始模块之外还要解析的根模块。

--add-exports source-module/package=target-module[,target-module]* 将 package 从 source-module 导出到 target-module。

--class-path path 指定搜索以查找类文件的目录和存档。此选项将覆盖 CLASSPATH 环境变量中的路径。如果未设置环境变量且未使用此选项,则搜索当前目录。对于 Linux 和 macOS,使用冒号 (:) 分隔路径中的项目。对于 Windows,使用分号 (;) 分隔项目。

--module-path modulepath 指定在何处查找应用程序模块。对于 Linux 和 macOS,使用冒号 (:) 分隔路径中的项目。对于 Windows,使用分号 (;) 分隔项目。

-quiet 重放有效历史记录,但不显示它。显示错误。

-restore 将环境重置为工具上一次运行的开始状态,或重置为上一次运行中执行 /reset、/reload 或 /env 命令时的状态。自该点以来的有效历史记录将被重放。使用此选项恢复以前的 JShell 会话。

/reset [options] 丢弃所有输入的片段并重新启动会话,如下所示

  • 使用提供的选项(如果有)更新环境设置。
  • 重置执行状态。
  • 运行启动脚本。

不重放历史记录。所有输入的代码都将丢失。

在命令行上输入或使用以前的 /reset、/env 或 /reload 命令提供的环境设置将保留,除非输入覆盖该设置的选项。

以下选项有效

--add-modules module[,module...] 指定除初始模块之外还要解析的根模块。

--add-exports source-module/package=target-module[,target-module]* 将 package 从 source-module 导出到 target-module。

--class-path path 指定要搜索以查找类文件的目录和存档。此选项会覆盖 CLASSPATH 环境变量中的路径。如果未设置环境变量且未使用此选项,则会搜索当前目录。

  • 对于 **Linux 和 macOS**,使用冒号 (:) 分隔路径中的项。
  • 对于 **Windows**,使用分号 (;) 分隔项。

--module-path modulepath 指定在何处查找应用程序模块。对于 Linux 和 macOS,使用冒号 (:) 分隔路径中的项目。对于 Windows,使用分号 (;) 分隔项目。

/save [options] file 将片段和命令保存到指定的文件。如果未输入任何选项,则保存活动片段。

以下选项有效

{name|id|startID-endID} [{name|id|startID-endID}...] 保存由名称、ID 或 ID 范围标识的片段和命令。对于 ID 范围,请提供以连字符分隔的起始 ID 和结束 ID。要提供列表,请用空格分隔列表中的项目。使用 /list 命令查看代码片段的 ID。

-all 保存所有片段,包括启动片段以及被覆盖或失败的片段。

-history 保存当前会话中输入的所有命令和片段的顺序历史记录。

-start 保存当前启动设置。如果未提供任何启动脚本,则保存一个空文件。

/set [setting] 设置配置信息,包括外部编辑器、启动设置和反馈模式。此命令还用于创建具有自定义提示、格式和截断值的自定义反馈模式。如果未输入任何设置,则显示编辑器、启动设置和反馈模式的当前设置。

以下值对设置有效

editor [options] [command] 设置在输入 /edit 命令时用于启动外部编辑器的命令。该命令可以包含用空格分隔的命令参数。如果未输入任何命令或选项,则显示当前设置。

以下选项有效

-default 将编辑器设置为 JShell 提供的默认编辑器。如果输入了用于启动编辑器的命令,则不能使用此选项。

-delete 将编辑器设置为会话开始时生效的编辑器。如果与 -retain 选项一起使用,则删除保留的编辑器设置,并将编辑器设置为以下第一个找到的环境变量:JSHELLEDITORVISUALEDITOR。如果未设置任何编辑器环境变量,则此选项将编辑器设置为默认编辑器。

如果输入了用于启动编辑器的命令,则不能使用此选项。

-retain 在会话之间保存编辑器设置。如果未输入其他选项或命令,则保存当前设置。

-wait 提示用户指示编辑何时完成。否则,编辑器退出后,控制权将返回到 JShell。如果使用的编辑器立即退出,例如,当编辑窗口已存在时,请使用此选项。此选项仅在输入了用于启动编辑器的命令时有效。

feedback [mode] 设置用于响应输入的反馈模式。如果未输入任何模式,则显示当前模式。

以下模式有效:concisenormalsilentverbose 以及使用 /set mode 命令创建的任何自定义模式。

format mode field "format-string" selector 设置响应输入时提供的反馈的格式。如果未输入任何模式,则显示所有反馈模式的所有字段的当前格式。如果只输入了一个模式,则显示该模式的当前格式。如果只输入了一个模式和一个字段,则显示该字段的当前格式。

要定义格式,需要以下参数

mode 指定将响应格式应用到的反馈模式。只有使用 /set mode 命令创建的自定义模式才能修改。

field 指定将响应格式应用到的特定于上下文的字段。这些字段在联机帮助中进行了描述,可以通过 jshell 使用 /help /set format 命令访问。

format-string 指定用作指定字段和选择器的响应格式的字符串。格式字符串的结构在联机帮助中进行了描述,可以通过 JShell 使用 /help /set format 命令访问。

selector 指定应用响应格式的上下文。选择器在联机帮助中进行了描述,可以通过 jshell 使用 /help /set format 命令访问。

mode [mode-name] [existing-mode] [options] 使用提供的模式名称创建自定义反馈模式。如果未输入任何模式名称,则显示所有模式的设置,包括模式、提示、格式和截断设置。如果提供了现有模式的名称,则将现有模式的设置复制到正在创建的模式。

以下选项有效

-command|-quiet 指定使用该模式时显示的命令反馈级别。创建反馈模式时需要此选项。使用 -command 显示命令的信息和验证反馈。使用 -quiet 仅显示命令的基本反馈,例如错误消息。

-delete 删除此会话的命名反馈模式。需要删除的模式名称。要永久删除保留的模式,请将 -retain 选项与该选项一起使用。预定义模式无法删除。

-retain 在会话之间保存命名反馈模式。需要保留的模式名称。使用 /set prompt/set format/set truncation 命令配置新的反馈模式。

要开始使用新模式,请使用 /set feedback 命令。

prompt mode "prompt-string" "continuation-prompt-string" 设置 JShell 中输入的提示。如果未输入任何模式,则显示所有反馈模式的当前提示。如果只输入了一个模式,则显示该模式的当前提示。

要定义提示,需要以下参数

mode 指定将提示应用到的反馈模式。只有使用 /set mode 命令创建的自定义模式才能修改。

prompt-string 指定用作第一行输入的提示的字符串。

continuation-prompt-string 指定用作完成片段所需的额外输入行提示的字符串。

start [-retain] [file [file...]|option] 设置在下次输入 /reset/reload/env 命令时使用的启动脚本名称。如果输入了多个脚本,则按输入顺序运行这些脚本。如果没有输入脚本或选项,则显示当前启动设置。

脚本可以是本地文件,也可以是以下预定义脚本之一

DEFAULT 加载默认条目,这些条目通常用作导入。JAVASE 导入所有 Java SE 包。PRINTING 将 print、println 和 printf 定义为 jshell 方法,供在工具内使用。以下选项有效

-default 将启动设置设置为默认设置。

-none 指定不使用任何启动设置。使用 -retain 选项在会话之间保存启动设置。

truncation mode length selector 设置显示值的最大长度。如果没有输入模式,则显示所有反馈模式的当前截断值。如果只输入模式,则显示该模式的当前截断值。

要定义截断值,需要以下参数

mode 指定将截断值应用到的反馈模式。只能修改使用 /set 模式命令创建的自定义模式。

length 指定用作指定选择器最大长度的无符号整数。

selector 指定应用截断值的上下文。选择器在联机帮助中进行了描述,可以通过 jshell 使用 /help /set truncation 命令访问联机帮助。

/types [option] 显示已输入的类、接口和枚举。如果没有输入选项,则显示所有当前活动的类、接口和枚举。

以下选项有效

{name|id|startID-endID} [{name|id|startID-endID}...] 显示由名称、ID 或 ID 范围标识的类、接口和枚举的信息。对于 ID 范围,请提供起始 ID 和结束 ID,并用连字符分隔。要提供列表,请用空格分隔列表中的项目。使用 /list 命令查看代码片段的 ID。

-all 显示所有类、接口和枚举的信息,包括在启动 JShell 时添加的类、接口和枚举,以及失败、被覆盖或被删除的类、接口和枚举。

-start 显示在启动 JShell 时添加的启动类、接口和枚举的信息。

/vars [option] 显示已输入的变量的名称、类型和值。如果没有输入选项,则显示所有当前活动的变量。

以下选项有效

{name|id|startID-endID} [{name|id|startID-endID}...] 显示由名称、ID 或 ID 范围标识的变量的信息。对于 ID 范围,请提供起始 ID 和结束 ID,并用连字符分隔。要提供列表,请用空格分隔列表中的项目。使用 /list 命令查看代码片段的 ID。

-all 显示所有变量的信息,包括在启动 JShell 时添加的变量,以及失败、被覆盖或被删除的变量。

-start 显示在启动 jshell 时添加的启动变量的信息。/? 与 /help 命令相同。

/! 重新运行最后一个代码片段。

/{name|id|startID-endID} [{name|id|startID-endID}...] 重新运行由 ID、ID 范围或名称标识的代码片段。对于 ID 范围,请提供起始 ID 和结束 ID,并用连字符分隔。要提供列表,请用空格分隔列表中的项目。列表中的第一个项目必须是 ID 或 ID 范围。使用 /list 命令查看代码片段的 ID。

/-n 重新运行倒数第 n 个代码片段。例如,如果输入了 15 个代码片段,则 /-4 运行第 11 个代码片段。命令不包含在计数中。

 

输入快捷键

以下快捷键可用于在 JShell 中输入命令和代码片段。

制表符完成

在输入代码片段、命令、子命令、命令参数或命令选项时,使用 Tab 键自动完成该项目。如果无法从已输入的内容中确定该项目,则会提供可能的选项。

在输入方法调用时,在方法调用的左括号后使用 Tab 键查看方法的参数。如果方法有多个签名,则会显示所有签名。第二次按 Tab 键会显示方法的描述和第一个签名的参数。继续按 Tab 键以查看任何其他签名的描述。

Shift+ V 在输入完整表达式后,使用此键序列将表达式转换为由表达式类型确定的类型变量声明。

Shift+ M 在输入完整表达式或语句后,使用此键序列将表达式或语句转换为方法声明。如果输入了表达式,则返回类型基于表达式的类型。

Shift+ I 当输入无法解析的标识符时,使用此键序列显示可能的导入,这些导入根据指定类路径的内容解析标识符。

命令缩写

如果缩写唯一标识命令,则接受命令的缩写。例如,/l 被识别为 /list 命令。但是,/s 不是有效的缩写,因为它无法确定是指 /set 还是 /save 命令。使用 /se 表示 /set 命令,使用 /sa 表示 /save 命令。

缩写也适用于子命令、命令参数和命令选项。例如,使用 /m -a 显示所有方法。

历史记录导航

在会话之间维护已输入内容的历史记录。使用向上和向下箭头滚动浏览当前和过去会话中的命令和代码片段。使用 Ctrl 键与向上和向下箭头组合,跳过多行代码片段的第一行以外的所有行。

使用 Ctrl+R 键组合在历史记录中搜索输入的字符串。提示符会更改以显示字符串和匹配项。Ctrl+R 从历史记录中的当前位置向后搜索,遍历较早的条目。Ctrl+S 从历史记录中的当前位置向前搜索,遍历较晚的条目。

输入编辑

JShell 的编辑功能类似于其他常见 shell 的编辑功能。键盘键和键组合提供行编辑快捷键。Ctrl 键和 Meta 键用于键组合。如果您的键盘没有 Meta 键,则 Alt 键通常映射为提供 Meta 键功能。

 

启动和停止 jshell 会话的示例

jshell 与 JDK 一起提供。要启动会话,请在命令行上输入 jshell。会打印欢迎消息,并提供用于输入命令和代码片段的提示符。

jshell
|  Welcome to JShell -- Version 16
|  For an introduction type: /help intro

jshell>

要查看在启动 JShell 时自动加载了哪些代码片段,请使用 /list -start 命令。默认启动代码片段是常见包的导入语句。每个代码片段的 ID 以字母 s 开头,表示它是启动代码片段。

jshell> /list -start

  s1 : import java.io.*;
  s2 : import java.math.*;
  s3 : import java.net.*;
  s4 : import java.nio.file.*;
  s5 : import java.util.*;
  s6 : import java.util.concurrent.*;
  s7 : import java.util.function.*;
  s8 : import java.util.prefs.*;
  s9 : import java.util.regex.*;
 s10 : import java.util.stream.*;

要结束会话,请使用 /exit 命令。

jshell> /exit
|  Goodbye

%

 

输入代码片段的示例

代码片段是 Java 语句、变量定义、方法定义、类定义、导入语句和表达式。如果缺少终止分号,则会自动在完成的代码片段的末尾添加终止分号。

以下示例显示了定义的两个变量和一个方法,以及运行该方法。请注意,由于没有提供变量,因此会自动创建一个 scratch 变量来保存结果。

jshell> int a=4
a ==> 4

jshell> int b=8
b ==> 8

jshell> int square(int i1) {
   ...> return i1 * i1;
   ...> }
|  created method square(int)

jshell> square(b)
$5 ==> 64

 

更改代码片段的示例

通过再次输入来更改变量、方法或类的定义。

以下示例显示了定义的方法和运行该方法

jshell> String grade(int testScore) {
...>     if (testScore >= 90) {
...>         return "Pass";
...>     }
...>     return "Fail";
...> }
|  created method grade(int)

jshell> grade(88)
$3 ==> "Fail"

要更改 grade 方法以允许更多学生通过,请再次输入方法定义并将及格分数更改为 80。使用向上箭头键检索以前的条目以避免重新输入它们,并在 if 语句中进行更改。以下示例显示了新定义并重新运行该方法以显示新结果

jshell> String grade(int testScore) {
...>     if (testScore >= 80) {
...>         return "Pass";
...>     }
...>     return "Fail";
...> }
|  modified method grade(int)

jshell> grade(88)
$5 ==> "Pass"

对于长度超过几行的代码片段,或者要进行多次更改,请使用 /edit 命令在编辑器中打开代码片段。完成更改后,关闭编辑窗口以将控制权返回到 jshell 会话。以下示例显示了命令以及关闭编辑窗口时提供的反馈。/list 命令用于显示及格分数已更改为 85。

jshell> /edit grade
|  modified method grade(int)
jshell> /list grade

   6 : String grade(int testScore) {
           if (testScore >= 85) {
               return "Pass";
           }
           return "Fail";
       }

 

创建自定义反馈模式的示例

反馈模式确定显示的提示符、输入代码片段时提供的反馈消息以及显示值的最大长度。提供了预定义的反馈模式。还提供了用于创建自定义反馈模式的命令。

使用 /set 模式命令创建新的反馈模式。在以下示例中,新的模式 mymode 基于预定义的反馈模式 normal,并显示验证命令反馈

jshell> /set mode mymode normal -command
|  Created new feedback mode: mymode

由于新模式基于 normal 模式,因此提示符相同。以下示例显示了如何查看使用哪些提示符,然后将提示符更改为自定义字符串。第一个字符串表示标准 JShell 提示符。第二个字符串表示多行代码片段中附加行的提示符。

jshell> /set prompt mymode
|  /set prompt mymode "\njshell> " "   ...> "

jshell> /set prompt mymode "\nprompt$ " "   continue$ "

显示值的最大长度由截断设置控制。不同类型的值可以具有不同的长度。以下示例设置了 72 的总体截断值,以及 500 的变量值表达式截断值

jshell> /set truncation mymode 72
jshell> /set truncation mymode 500 varvalue

输入代码片段后显示的反馈由格式设置控制,并基于输入的代码片段类型以及对该代码片段执行的操作。在预定义的模式 normal 中,创建方法时会显示创建的字符串。以下示例显示了如何将该字符串更改为 defined

jshell> /set format mymode action "defined" added-primary

使用 /set feedback 命令开始使用刚刚创建的反馈模式。以下示例显示了自定义模式的使用情况

jshell> /set feedback mymode
|  Feedback mode: mymode

prompt$ int square (int num1){
   continue$ return num1*num1;
   continue$ }
|  defined method square(int)

prompt$

更多学习

最后更新时间: 2021 年 9 月 14 日


返回教程列表