| --- | |
| # Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. | |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| # | |
| # This code is free software; you can redistribute it and/or modify it | |
| # under the terms of the GNU General Public License version 2 only, as | |
| # published by the Free Software Foundation. | |
| # | |
| # This code is distributed in the hope that it will be useful, but WITHOUT | |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| # version 2 for more details (a copy is included in the LICENSE file that | |
| # accompanied this code). | |
| # | |
| # You should have received a copy of the GNU General Public License version | |
| # 2 along with this work; if not, write to the Free Software Foundation, | |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| # | |
| # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| # or visit www.oracle.com if you need additional information or have any | |
| # questions. | |
| # | |
| title: 'JSHELL(1) JDK @@VERSION_SHORT@@ | JDK Commands' | |
| date: @@COPYRIGHT_YEAR@@ | |
| lang: en | |
| --- | |
| ## Name | |
| jshell - interactively evaluate declarations, statements, and expressions of | |
| the Java programming language in a read-eval-print loop (REPL) | |
| ## Synopsis | |
| `jshell` \[*options*\] \[*load-files*\] | |
| *options* | |
| : Command-line options, separated by spaces. See [Options for jshell]. | |
| *load-files* | |
| : One or more scripts to run when the tool is started. Scripts can contain | |
| any valid code snippets or JShell commands. | |
| The script can be a local file or one of following predefined scripts: | |
| `DEFAULT` | |
| : Loads the default entries, which are commonly used as imports. | |
| `JAVASE` | |
| : Imports all Java SE packages. | |
| `PRINTING` | |
| : Defines `print`, `println`, and `printf` as `jshell` methods for use | |
| within the tool. | |
| `TOOLING` | |
| : Defines `javac`, `jar`, and other methods for running JDK tools via | |
| their command-line interface within the `jshell` tool. | |
| For more than one script, use a space to separate the names. Scripts are | |
| run in the order in which they're entered on the command line. Command-line | |
| scripts are run after startup scripts. To run a script after JShell is | |
| started, use the `/open` command. | |
| To accept input from standard input and suppress the interactive I/O, enter | |
| a hyphen (-) for *load-files*. This option enables the use of the `jshell` | |
| tool in pipe chains. | |
| ## Description | |
| JShell provides a way to interactively evaluate declarations, statements, and | |
| expressions of the Java programming language, making it easier to learn the | |
| language, explore unfamiliar code and APIs, and prototype complex code. Java | |
| statements, variable definitions, method definitions, class definitions, import | |
| statements, and expressions are accepted. The bits of code entered are called | |
| snippets. | |
| As snippets are entered, they're evaluated, and feedback is provided. Feedback | |
| varies from the results and explanations of actions to nothing, depending on | |
| the snippet entered and the feedback mode chosen. Errors are described | |
| regardless of the feedback mode. Start with the verbose mode to get the most | |
| feedback while learning the tool. | |
| Command-line options are available for configuring the initial environment when | |
| JShell is started. Within JShell, commands are available for modifying the | |
| environment as needed. | |
| Existing snippets can be loaded from a file to initialize a JShell session, or | |
| at any time within a session. Snippets can be modified within the session to | |
| try out different variations and make corrections. To keep snippets for later | |
| use, save them to a file. | |
| ## Options for jshell | |
| `--add-exports` *module*/*package* | |
| : Specifies a package to be considered as exported from its defining module. | |
| `--add-modules` *module*\[`,`*module*...\] | |
| : Specifies the root modules to resolve in addition to the initial module. | |
| `-C`*flag* | |
| : passes *flag* to the Java compiler inside JShell. For example, `-C-Xlint` | |
| enables all the recommended lint warnings, and `-C--release=<N>` compiles | |
| for Java SE N, as if --release N was specified. | |
| `--class-path` *path* | |
| : Specifies the directories and archives that are searched to locate class | |
| files. This option overrides the path in the `CLASSPATH` environment | |
| variable. If the environment variable isn't set and this option isn't used, | |
| then the current directory is searched. For Linux and macOS, use a colon | |
| (:) to separate items in the path. For Windows, use a semicolon (;) to | |
| separate items. | |
| `--enable-preview` | |
| : Allows code to depend on the preview features of this release. | |
| `--execution` *specification* | |
| : Specifies an alternate execution engine, where *specification* is an | |
| ExecutionControl spec. See the documentation of the package jdk.jshell.spi | |
| for the syntax of the spec. | |
| `--feedback` *mode* | |
| : Sets the initial level of feedback provided in response to what's entered. | |
| The initial level can be overridden within a session by using the | |
| `/set feedback` *mode* command. The default is `normal`. | |
| The following values are valid for *mode*: | |
| `verbose` | |
| : Provides detailed feedback for entries. Additional information about | |
| the action performed is displayed after the result of the action. The | |
| next prompt is separated from the feedback by a blank line. | |
| `normal` | |
| : Provides an average amount of feedback. The next prompt is separated | |
| from the feedback by a blank line. | |
| `concise` | |
| : Provides minimal feedback. The next prompt immediately follows the code | |
| snippet or feedback. | |
| `silent` | |
| : Provides no feedback. The next prompt immediately follows the code | |
| snippet. | |
| *custom* | |
| : Provides custom feedback based on how the mode is defined. Custom | |
| feedback modes are created within JShell by using the `/set mode` | |
| command. | |
| `--help` or `-h` or `-?` | |
| : Prints a summary of standard options and exits the tool. | |
| `--help-extra` or `-X` | |
| : Prints a summary of nonstandard options and exits the tool. Nonstandard | |
| options are subject to change without notice. | |
| `-J`*flag* | |
| : passes *flag* to the runtime system, but has no effect on the execution of | |
| code snippets. To specify flags that affect the execution of code snippets, | |
| use `-R`*flag*. Alternatively, use `-J`*flag* with `--execution local`. | |
| `--module-path` *modulepath* | |
| : Specifies where to find application modules. For Linux and macOS, use a | |
| colon (:) to separate items in the path. For Windows, use a semicolon (;) | |
| to separate items. | |
| `--no-startup` | |
| : Prevents startup scripts from running when JShell starts. Use this option | |
| to run only the scripts entered on the command line when JShell is started, | |
| or to start JShell without any preloaded information if no scripts are | |
| entered. This option can't be used if the `--startup` option is used. | |
| `-q` | |
| : Sets the feedback mode to `concise`, which is the same as entering | |
| `--feedback concise`. | |
| `-R`*flag* | |
| : passes *flag* to the runtime system only when code snippets are executed. | |
| For example, `-R-Dfoo=bar` means that execution of the snippet | |
| `System.getProperty("foo")` will return `"bar"`. | |
| `-s` | |
| : Sets the feedback mode to `silent`, which is the same as entering | |
| `--feedback silent`. | |
| `--show-version` | |
| : Prints version information and enters the tool. | |
| `--startup` *file* | |
| : Overrides the default startup script for this session. The script can | |
| contain any valid code snippets or commands. | |
| The script can be a local file or one of the following predefined scripts: | |
| `DEFAULT` | |
| : Loads the default entries, which are commonly used as imports. | |
| `JAVASE` | |
| : Imports all Java SE packages. | |
| `PRINTING` | |
| : Defines `print`, `println`, and `printf` as `jshell` methods for use | |
| within the tool. | |
| `TOOLING` | |
| : Defines `javac`, `jar`, and other methods for running JDK tools via | |
| their command-line interface within the `jshell` tool. | |
| For more than one script, provide a separate instance of this option for | |
| each script. Startup scripts are run when JShell is first started and when | |
| the session is restarted with the `/reset`, `/reload`, or `/env` command. | |
| Startup scripts are run in the order in which they're entered on the | |
| command line. | |
| This option can't be used if the `--no-startup` option is used. | |
| `-v` | |
| : Sets the feedback mode to `verbose`, which is the same as entering | |
| `--feedback verbose`. | |
| `--version` | |
| : Prints version information and exits the tool. | |
| ## jshell Commands | |
| Within the `jshell` tool, commands are used to modify the environment and | |
| manage code snippets. | |
| `/drop` {*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Drops snippets identified by name, ID, or ID range, making them inactive. | |
| For a range of IDs, provide the starting ID and ending ID separated with a | |
| hyphen. To provide a list, separate the items in the list with a space. Use | |
| the `/list` command to see the IDs of code snippets. | |
| `/edit` \[*option*\] | |
| : Opens an editor. If no option is entered, then the editor opens with the | |
| active snippets. | |
| The following options are valid: | |
| {*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Opens the editor with the snippets identified by name, ID, or ID range. | |
| For a range of IDs, provide the starting ID and ending ID separated | |
| with a hyphen. To provide a list, separate the items in the list with a | |
| space. Use the `/list` command to see the IDs of code snippets. | |
| `-all` | |
| : Opens the editor with all snippets, including startup snippets and | |
| snippets that failed, were overwritten, or were dropped. | |
| `-start` | |
| : Opens the editor with startup snippets that were evaluated when JShell | |
| was started. | |
| To exit edit mode, close the editor window, or respond to the prompt | |
| provided if the `-wait` option was used when the editor was set. | |
| Use the `/set editor` command to specify the editor to use. If no editor is | |
| set, then the following environment variables are checked in order: | |
| `JSHELLEDITOR`, `VISUAL`, and `EDITOR`. If no editor is set in JShell and | |
| none of the editor environment variables is set, then a simple default | |
| editor is used. | |
| `/env` \[*options*\] | |
| : Displays the environment settings, or updates the environment settings and | |
| restarts the session. If no option is entered, then the current environment | |
| settings are displayed. If one or more options are entered, then the | |
| session is restarted as follows: | |
| - Updates the environment settings with the provided options. | |
| - Resets the execution state. | |
| - Runs the startup scripts. | |
| - Silently replays the history in the order entered. The history includes | |
| all valid snippets or `/drop` commands entered at the `jshell` prompt, | |
| in scripts entered on the command line, or scripts entered with the | |
| `/open` command. | |
| Environment settings entered on the command line or provided with a | |
| previous `/reset`, `/env`, or `/reload` command are maintained unless an | |
| *option* is entered that overwrites the setting. | |
| The following options are valid: | |
| `--add-modules` *module*\[`,`*module*...\] | |
| : Specifies the root modules to resolve in addition to the initial | |
| module. | |
| `--add-exports` *source-module*`/`*package*`=`*target-module*\[`,`*target-module*\]\* | |
| : Adds an export of *package* from *source-module* to *target-module*. | |
| `--class-path` *path* | |
| : Specifies the directories and archives that are searched to locate | |
| class files. This option overrides the path in the `CLASSPATH` | |
| environment variable. If the environment variable isn't set and this | |
| option isn't used, then the current directory is searched. For Linux | |
| and macOS, use a colon (`:`) to separate items in the path. For Windows, | |
| use a semicolon (`;`) to separate items. | |
| `--module-path` *modulepath* | |
| : Specifies where to find application modules. For Linux and macOS, use | |
| a colon (`:`) to separate items in the path. For Windows, use a | |
| semicolon (`;`) to separate items. | |
| `/exit` \[*integer-expression-snippet*\] | |
| : Exits the tool. If no snippet is entered, the exit status is zero. If a | |
| snippet is entered and the result of the snippet is an integer, the result | |
| is used as the exit status. If an error occurs, or the result of the | |
| snippet is not an integer, an error is displayed and the tool remains | |
| active. | |
| `/history` | |
| : Displays what was entered in this session. | |
| `/help` \[*command*\|*subject*\] | |
| : Displays information about commands and subjects. If no options are | |
| entered, then a summary of information for all commands and a list of | |
| available subjects are displayed. If a valid command is provided, then | |
| expanded information for that command is displayed. If a valid subject is | |
| entered, then information about that subject is displayed. | |
| The following values for *subject* are valid: | |
| `context` | |
| : Describes the options that are available for configuring the | |
| environment. | |
| `intro` | |
| : Provides an introduction to the tool. | |
| `shortcuts` | |
| : Describes keystrokes for completing commands and snippets. See [Input | |
| Shortcuts]. | |
| `/imports` | |
| : Displays the current active imports, including those from the startup | |
| scripts and scripts that were entered on the command line when JShell was | |
| started. | |
| `/list` \[*option*\] | |
| : Displays a list of snippets and their IDs. If no option is entered, then | |
| all active snippets are displayed, but startup snippets aren't. | |
| The following options are valid: | |
| {*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Displays the snippets identified by name, ID, or ID range. For a range | |
| of IDs, provide the starting ID and ending ID separated with a hyphen. | |
| To provide a list, separate the items in the list with a space. | |
| `-all` | |
| : Displays all snippets, including startup snippets and snippets that | |
| failed, were overwritten, or were dropped. IDs that begin with `s` are | |
| startup snippets. IDs that begin with `e` are snippets that failed. | |
| `-start` | |
| : Displays startup snippets that were evaluated when JShell was started. | |
| `/methods` \[*option*\] | |
| : Displays information about the methods that were entered. If no option is | |
| entered, then the name, parameter types, and return type of all active | |
| methods are displayed. | |
| The following options are valid: | |
| {*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Displays information for methods identified by name, ID, or ID range. | |
| For a range of IDs, provide the starting ID and ending ID separated | |
| with a hyphen. To provide a list, separate the items in the list with a | |
| space. Use the `/list` command to see the IDs of code snippets. | |
| `-all` | |
| : Displays information for all methods, including those added when JShell | |
| was started, and methods that failed, were overwritten, or were | |
| dropped. | |
| `-start` | |
| : Displays information for startup methods that were added when JShell | |
| was started. | |
| `/open` *file* | |
| : Opens the script specified and reads the snippets into the tool. The script | |
| can be a local file or one of the following predefined scripts: | |
| `DEFAULT` | |
| : Loads the default entries, which are commonly used as imports. | |
| `JAVASE` | |
| : Imports all Java SE packages. | |
| `PRINTING` | |
| : Defines `print`, `println`, and `printf` as `jshell` methods for use | |
| within the tool. | |
| `TOOLING` | |
| : Defines `javac`, `jar`, and other methods for running JDK tools via | |
| their command-line interface within the `jshell` tool. | |
| `/reload` \[*options*\] | |
| : Restarts the session as follows: | |
| - Updates the environment settings with the provided options, if any. | |
| - Resets the execution state. | |
| - Runs the startup scripts. | |
| - Replays the history in the order entered. The history includes all | |
| valid snippets or `/drop` commands entered at the `jshell` prompt, in | |
| scripts entered on the command line, or scripts entered with the | |
| `/open` command. | |
| Environment settings entered on the command line or provided with a | |
| previous `/reset`, `/env`, or `/reload` command are maintained unless an | |
| *option* is entered that overwrites the setting. | |
| The following options are valid: | |
| `--add-modules` *module*\[`,`*module*...\] | |
| : Specifies the root modules to resolve in addition to the initial | |
| module. | |
| `--add-exports` *source-module*`/`*package*`=`*target-module*\[`,`*target-module*\]\* | |
| : Adds an export of *package* from *source-module* to *target-module*. | |
| `--class-path` *path* | |
| : Specifies the directories and archives that are searched to locate | |
| class files. This option overrides the path in the `CLASSPATH` | |
| environment variable. If the environment variable isn't set and this | |
| option isn't used, then the current directory is searched. For Linux | |
| and macOS, use a colon (`:`) to separate items in the path. For | |
| Windows, use a semicolon (`;`) to separate items. | |
| `--module-path` *modulepath* | |
| : Specifies where to find application modules. For Linux and macOS, use | |
| a colon (`:`) to separate items in the path. For Windows, use a | |
| semicolon (`;`) to separate items. | |
| `-quiet` | |
| : Replays the valid history without displaying it. Errors are displayed. | |
| `-restore` | |
| : Resets the environment to the state at the start of the previous run of | |
| the tool or to the last time a `/reset`, `/reload`, or `/env` command | |
| was executed in the previous run. The valid history since that point is | |
| replayed. Use this option to restore a previous JShell session. | |
| `/reset` \[*options*\] | |
| : Discards all entered snippets and restarts the session as follows: | |
| - Updates the environment settings with the provided options, if any. | |
| - Resets the execution state. | |
| - Runs the startup scripts. | |
| History is not replayed. All code that was entered is lost. | |
| Environment settings entered on the command line or provided with a | |
| previous `/reset`, `/env`, or `/reload` command are maintained unless an | |
| *option* is entered that overwrites the setting. | |
| The following options are valid: | |
| `--add-modules` *module*\[`,`*module*...\] | |
| : Specifies the root modules to resolve in addition to the initial | |
| module. | |
| `--add-exports` *source-module*`/`*package*`=`*target-module*\[`,`*target-module*\]\* | |
| : Adds an export of *package* from *source-module* to *target-module*. | |
| `--class-path` *path* | |
| : Specifies the directories and archives that are searched to locate | |
| class files. This option overrides the path in the `CLASSPATH` | |
| environment variable. If the environment variable isn't set and this | |
| option isn't used, then the current directory is searched. For Linux | |
| and macOS, use a colon (`:`) to separate items in the path. For | |
| Windows, use a semicolon (`;`) to separate items. | |
| `--module-path` *modulepath* | |
| : Specifies where to find application modules. For Linux and macOS, use | |
| a colon (`:`) to separate items in the path. For Windows, use a | |
| semicolon (`;`) to separate items. | |
| `/save` \[*options*\] *file* | |
| : Saves snippets and commands to the file specified. If no options are | |
| entered, then active snippets are saved. | |
| The following options are valid: | |
| {*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Saves the snippets and commands identified by name, ID, or ID range. | |
| For a range of IDs, provide the starting ID and ending ID separated | |
| with a hyphen. To provide a list, separate the items in the list with a | |
| space. Use the `/list` command to see the IDs of the code snippets. | |
| `-all` | |
| : Saves all snippets, including startup snippets and snippets that were | |
| overwritten or failed. | |
| `-history` | |
| : Saves the sequential history of all commands and snippets entered in | |
| the current session. | |
| `-start` | |
| : Saves the current startup settings. If no startup scripts were | |
| provided, then an empty file is saved. | |
| `/set` \[*setting*\] | |
| : Sets configuration information, including the external editor, startup | |
| settings, and feedback mode. This command is also used to create a custom | |
| feedback mode with customized prompt, format, and truncation values. If no | |
| setting is entered, then the current setting for the editor, startup | |
| settings, and feedback mode are displayed. | |
| The following values are valid for `setting`: | |
| `editor` \[*options*\] \[*command*\] | |
| : Sets the command used to start an external editor when the `/edit` | |
| command is entered. The command can include command arguments separated | |
| by spaces. If no command or options are entered, then the current | |
| setting is displayed. | |
| The following options are valid: | |
| `-default` | |
| : Sets the editor to the default editor provided with JShell. This | |
| option can't be used if a command for starting an editor is | |
| entered. | |
| `-delete` | |
| : Sets the editor to the one in effect when the session started. If | |
| used with the `-retain` option, then the retained editor setting is | |
| deleted and the editor is set to the first of the following | |
| environment variables found: `JSHELLEDITOR`, `VISUAL`, or `EDITOR`. | |
| If none of the editor environment variables are set, then this | |
| option sets the editor to the default editor. | |
| This option can't be used if a command for starting an editor is | |
| entered. | |
| `-retain` | |
| : Saves the editor setting across sessions. If no other option or a | |
| command is entered, then the current setting is saved. | |
| `-wait` | |
| : Prompts the user to indicate when editing is complete. Otherwise | |
| control returns to JShell when the editor exits. Use this option if | |
| the editor being used exits immediately, for example, when an edit | |
| window already exists. This option is valid only when a command for | |
| starting an editor is entered. | |
| `feedback` \[*mode*\] | |
| : Sets the feedback mode used to respond to input. If no mode is entered, | |
| then the current mode is displayed. | |
| The following modes are valid: `concise`, `normal`, `silent`, | |
| `verbose`, and any custom mode created with the `/set mode` command. | |
| `format` *mode* *field* `"`*format-string*`"` *selector* | |
| : Sets the format of the feedback provided in response to input. If no | |
| mode is entered, then the current formats for all fields for all | |
| feedback modes are displayed. If only a mode is entered, then the | |
| current formats for that mode are displayed. If only a mode and field | |
| are entered, then the current formats for that field are displayed. | |
| To define a format, the following arguments are required: | |
| *mode* | |
| : Specifies a feedback mode to which the response format is applied. | |
| Only custom modes created with the `/set mode` command can be | |
| modified. | |
| *field* | |
| : Specifies a context-specific field to which the response format is | |
| applied. The fields are described in the online help, which is | |
| accessed from JShell using the `/help /set format` command. | |
| `"`*format-string*`"` | |
| : Specifies the string to use as the response format for the | |
| specified field and selector. The structure of the format string is | |
| described in the online help, which is accessed from JShell using | |
| the `/help /set format` command. | |
| *selector* | |
| : Specifies the context in which the response format is applied. The | |
| selectors are described in the online help, which is accessed from | |
| JShell using the `/help /set format` command. | |
| `mode` \[*mode-name*\] \[*existing-mode*\] \[*options*\] | |
| : Creates a custom feedback mode with the mode name provided. If no mode | |
| name is entered, then the settings for all modes are displayed, which | |
| includes the mode, prompt, format, and truncation settings. If the name | |
| of an existing mode is provided, then the settings from the existing | |
| mode are copied to the mode being created. | |
| The following options are valid: | |
| `-command`\|`-quiet` | |
| : Specifies the level of feedback displayed for commands when using | |
| the mode. This option is required when creating a feedback mode. | |
| Use `-command` to show information and verification feedback for | |
| commands. Use `-quiet` to show only essential feedback for | |
| commands, such as error messages. | |
| `-delete` | |
| : Deletes the named feedback mode for this session. The name of the | |
| mode to delete is required. To permanently delete a retained mode, | |
| use the `-retain` option with this option. Predefined modes can't | |
| be deleted. | |
| `-retain` | |
| : Saves the named feedback mode across sessions. The name of the mode | |
| to retain is required. | |
| Configure the new feedback mode using the `/set prompt`, `/set format`, | |
| and `/set truncation` commands. | |
| To start using the new mode, use the `/set feedback` command. | |
| `prompt` *mode* `"`*prompt-string*`"` `"`*continuation-prompt-string*`"` | |
| : Sets the prompts for input within JShell. If no mode is entered, then | |
| the current prompts for all feedback modes are displayed. If only a | |
| mode is entered, then the current prompts for that mode are displayed. | |
| To define a prompt, the following arguments are required: | |
| *mode* | |
| : Specifies the feedback mode to which the prompts are applied. Only | |
| custom modes created with the `/set mode` command can be modified. | |
| `"`*prompt-string*`"` | |
| : Specifies the string to use as the prompt for the first line of | |
| input. | |
| `"`*continuation-prompt-string*`"` | |
| : Specifies the string to use as the prompt for the additional input | |
| lines needed to complete a snippet. | |
| `start` \[`-retain`\] \[*file* \[*file*...\]\|*option*\] | |
| : Sets the names of the startup scripts used when the next `/reset`, | |
| `/reload`, or `/env` command is entered. If more than one script is | |
| entered, then the scripts are run in the order entered. If no scripts | |
| or options are entered, then the current startup settings are | |
| displayed. | |
| The scripts can be local files or one of the following predefined | |
| scripts: | |
| `DEFAULT` | |
| : Loads the default entries, which are commonly used as imports. | |
| `JAVASE` | |
| : Imports all Java SE packages. | |
| `PRINTING` | |
| : Defines `print`, `println`, and `printf` as `jshell` methods for | |
| use within the tool. | |
| `TOOLING` | |
| : Defines `javac`, `jar`, and other methods for running JDK tools via | |
| their command-line interface within the `jshell` tool. | |
| The following options are valid: | |
| `-default` | |
| : Sets the startup settings to the default settings. | |
| `-none` | |
| : Specifies that no startup settings are used. | |
| Use the `-retain` option to save the start setting across sessions. | |
| `truncation` *mode* *length* *selector* | |
| : Sets the maximum length of a displayed value. If no mode is entered, | |
| then the current truncation values for all feedback modes are | |
| displayed. If only a mode is entered, then the current truncation | |
| values for that mode are displayed. | |
| To define truncation values, the following arguments are required: | |
| *mode* | |
| : Specifies the feedback mode to which the truncation value is | |
| applied. Only custom modes created with the `/set mode` command can | |
| be modified. | |
| *length* | |
| : Specifies the unsigned integer to use as the maximum length for the | |
| specified selector. | |
| *selector* | |
| : Specifies the context in which the truncation value is applied. The | |
| selectors are described in the online help, which is accessed from | |
| JShell using the `/help /set truncation` command. | |
| `/types` \[*option*\] | |
| : Displays classes, interfaces, and enums that were entered. If no option is | |
| entered, then all current active classes, interfaces, and enums are | |
| displayed. | |
| The following options are valid: | |
| {*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Displays information for classes, interfaces, and enums identified by | |
| name, ID, or ID range. For a range of IDs, provide the starting ID and | |
| ending ID separated with a hyphen. To provide a list, separate the | |
| items in the list with a space. Use the `/list` command to see the IDs | |
| of the code snippets. | |
| `-all` | |
| : Displays information for all classes, interfaces, and enums, including | |
| those added when JShell was started, and classes, interfaces, and enums | |
| that failed, were overwritten, or were dropped. | |
| `-start` | |
| : Displays information for startup classes, interfaces, and enums that | |
| were added when JShell was started. | |
| `/vars` \[*option*\] | |
| : Displays the name, type, and value of variables that were entered. If no | |
| option is entered, then all current active variables are displayed. | |
| The following options are valid: | |
| {*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Displays information for variables identified by name, ID, or ID range. | |
| For a range of IDs, provide the starting ID and ending ID separated | |
| with a hyphen. To provide a list, separate the items in the list with a | |
| space. Use the `/list` command to see the IDs of the code snippets. | |
| `-all` | |
| : Displays information for all variables, including those added when | |
| JShell was started, and variables that failed, were overwritten, or | |
| were dropped. | |
| `-start` | |
| : Displays information for startup variables that were added when JShell | |
| was started. | |
| `/?` | |
| : Same as the `/help` command. | |
| `/!` | |
| : Reruns the last snippet. | |
| `/`{*name*\|*id*\|*startID*`-`*endID*} \[{*name*\|*id*\|*startID*`-`*endID*}...\] | |
| : Reruns the snippets identified by ID, range of IDs, or name. For a range of | |
| IDs, provide the starting ID and ending ID separated with a hyphen. To | |
| provide a list, separate the items in the list with a space. The first item | |
| in the list must be an ID or ID range. Use the `/list` command to see the | |
| IDs of the code snippets. | |
| `/-`*n* | |
| : Reruns the -*n*th previous snippet. For example, if 15 code snippets were | |
| entered, then `/-4` runs the 11th snippet. Commands aren't included in the | |
| count. | |
| ## Input Shortcuts | |
| The following shortcuts are available for entering commands and snippets in | |
| JShell. | |
| ### Tab completion | |
| **\<tab\>** | |
| : When entering snippets, commands, subcommands, command arguments, or | |
| command options, use the Tab key to automatically complete the item. If the | |
| item can't be determined from what was entered, then possible options are | |
| provided. | |
| When entering a method call, use the Tab key after the method call's | |
| opening parenthesis to see the parameters for the method. If the method has | |
| more than one signature, then all signatures are displayed. Pressing the | |
| Tab key a second time displays the description of the method and the | |
| parameters for the first signature. Continue pressing the Tab key for a | |
| description of any additional signatures. | |
| **Shift+\<Tab\> V** | |
| : After entering a complete expression, use this key sequence to convert the | |
| expression to a variable declaration of a type determined by the type of | |
| the expression. | |
| **Shift+\<Tab\> M** | |
| : After entering a complete expression or statement, use this key sequence to | |
| convert the expression or statement to a method declaration. If an | |
| expression is entered, the return type is based on the type of the | |
| expression. | |
| **Shift+\<Tab\> I** | |
| : When an identifier is entered that can't be resolved, use this key sequence | |
| to show possible imports that resolve the identifier based on the content | |
| of the specified class path. | |
| ### Command abbreviations | |
| An abbreviation of a command is accepted if the abbreviation uniquely | |
| identifies a command. For example, `/l` is recognized as the `/list` command. | |
| However, `/s` isn't a valid abbreviation because it can't be determined if the | |
| `/set` or `/save` command is meant. Use `/se` for the `/set` command or `/sa` | |
| for the `/save` command. | |
| Abbreviations are also accepted for subcommands, command arguments, and command | |
| options. For example, use `/m -a` to display all methods. | |
| ### History navigation | |
| A history of what was entered is maintained across sessions. Use the up and | |
| down arrows to scroll through commands and snippets from the current and past | |
| sessions. Use the Ctrl key with the up and down arrows to skip all but the | |
| first line of multiline snippets. | |
| ### History search | |
| Use the Ctrl+R key combination to search the history for the string entered. | |
| The prompt changes to show the string and the match. Ctrl+R searches backwards | |
| from the current location in the history through earlier entries. Ctrl+S | |
| searches forward from the current location in the history though later entries. | |
| ## Input Editing | |
| The editing capabilities of JShell are similar to that of other common shells. | |
| Keyboard keys and key combinations provide line editing shortcuts. The Ctrl key | |
| and Meta key are used in key combinations. If your keyboard doesn't have a Meta | |
| key, then the Alt key is often mapped to provide Meta key functionality. | |
| Table: Line Editing Shortcuts | |
| Key or Key Combination Action | |
| ----------------------- ------- | |
| Return Enter the current line. | |
| Left arrow Move the cursor to the left one character. | |
| Right arrow Move the cursor to the right one character. | |
| Ctrl+A Move the cursor to the beginning of the line. | |
| Ctrl+E Move the cursor to the end of the line. | |
| Meta+B Move the cursor to the left one word. | |
| Meta+F Move the cursor to the right one word. | |
| Delete Delete the character under the cursor. | |
| Backspace Delete the character before the cursor. | |
| Ctrl+K Delete the text from the cursor to the end of the line. | |
| Meta+D Delete the text from the cursor to the end of the word. | |
| Ctrl+W Delete the text from the cursor to the previous white space. | |
| Ctrl+Y Paste the most recently deleted text into the line. | |
| Meta+Y After Ctrl+Y, press to cycle through the previously deleted text. | |
| ----------------------- ------- | |
| ## Example of Starting and Stopping a JShell Session | |
| JShell is provided with the JDK. To start a session, enter `jshell` on the | |
| command line. A welcome message is printed, and a prompt for entering commands | |
| and snippets is provided. | |
| ``` | |
| % jshell | |
| | Welcome to JShell -- Version 9 | |
| | For an introduction type: /help intro | |
| jshell> | |
| ``` | |
| To see which snippets were automatically loaded when JShell started, use the | |
| `/list -start` command. The default startup snippets are import statements for | |
| common packages. The ID for each snippet begins with the letter *s*, which | |
| indicates it's a startup snippet. | |
| ``` | |
| 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.*; | |
| jshell> | |
| ``` | |
| To end the session, use the `/exit` command. | |
| ``` | |
| jshell> /exit | |
| | Goodbye | |
| % | |
| ``` | |
| ## Example of Entering Snippets | |
| Snippets are Java statements, variable definitions, method definitions, class | |
| definitions, import statements, and expressions. Terminating semicolons are | |
| automatically added to the end of a completed snippet if they're missing. | |
| The following example shows two variables and a method being defined, and the | |
| method being run. Note that a scratch variable is automatically created to hold | |
| the result because no variable was provided. | |
| ``` | |
| 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 | |
| ``` | |
| ## Example of Changing Snippets | |
| Change the definition of a variable, method, or class by entering it again. | |
| The following examples shows a method being defined and the method run: | |
| ``` | |
| jshell> String grade(int testScore) { | |
| ...> if (testScore >= 90) { | |
| ...> return "Pass"; | |
| ...> } | |
| ...> return "Fail"; | |
| ...> } | |
| | created method grade(int) | |
| jshell> grade(88) | |
| $3 ==> "Fail" | |
| ``` | |
| To change the method `grade` to allow more students to pass, enter the method | |
| definition again and change the pass score to `80`. Use the up arrow key to | |
| retrieve the previous entries to avoid having to reenter them and make the | |
| change in the `if` statement. The following example shows the new definition | |
| and reruns the method to show the new result: | |
| ``` | |
| jshell> String grade(int testScore) { | |
| ...> if (testScore >= 80) { | |
| ...> return "Pass"; | |
| ...> } | |
| ...> return "Fail"; | |
| ...> } | |
| | modified method grade(int) | |
| jshell> grade(88) | |
| $5 ==> "Pass" | |
| ``` | |
| For snippets that are more than a few lines long, or to make more than a few | |
| changes, use the `/edit` command to open the snippet in an editor. After the | |
| changes are complete, close the edit window to return control to the JShell | |
| session. The following example shows the command and the feedback provided when | |
| the edit window is closed. The `/list` command is used to show that the pass | |
| score was changed to `85`. | |
| ``` | |
| jshell> /edit grade | |
| | modified method grade(int) | |
| jshell> /list grade | |
| 6 : String grade(int testScore) { | |
| if (testScore >= 85) { | |
| return "Pass"; | |
| } | |
| return "Fail"; | |
| } | |
| ``` | |
| ## Example of Creating a Custom Feedback Mode | |
| The feedback mode determines the prompt that's displayed, the feedback messages | |
| that are provided as snippets are entered, and the maximum length of a | |
| displayed value. Predefined feedback modes are provided. Commands for creating | |
| custom feedback modes are also provided. | |
| Use the `/set mode` command to create a new feedback mode. In the following | |
| example, the new mode `mymode`, is based on the predefined feedback mode, | |
| `normal`, and verifying command feedback is displayed: | |
| ``` | |
| jshell> /set mode mymode normal -command | |
| | Created new feedback mode: mymode | |
| ``` | |
| Because the new mode is based on the `normal` mode, the prompts are the same. | |
| The following example shows how to see what prompts are used and then changes | |
| the prompts to custom strings. The first string represents the standard JShell | |
| prompt. The second string represents the prompt for additional lines in | |
| multiline snippets. | |
| ``` | |
| jshell> /set prompt mymode | |
| | /set prompt mymode "\njshell> " " ...> " | |
| jshell> /set prompt mymode "\nprompt$ " " continue$ " | |
| ``` | |
| The maximum length of a displayed value is controlled by the truncation | |
| setting. Different types of values can have different lengths. The following | |
| example sets an overall truncation value of 72, and a truncation value of 500 | |
| for variable value expressions: | |
| ``` | |
| jshell> /set truncation mymode 72 | |
| jshell> /set truncation mymode 500 varvalue | |
| ``` | |
| The feedback displayed after snippets are entered is controlled by the format | |
| setting and is based on the type of snippet entered and the action taken for | |
| that snippet. In the predefined mode `normal`, the string `created` is | |
| displayed when a method is created. The following example shows how to change | |
| that string to `defined`: | |
| ``` | |
| jshell> /set format mymode action "defined" added-primary | |
| ``` | |
| Use the `/set feedback` command to start using the feedback mode that was just | |
| created. The following example shows the custom mode in use: | |
| ``` | |
| jshell> /set feedback mymode | |
| | Feedback mode: mymode | |
| prompt$ int square (int num1){ | |
| continue$ return num1*num1; | |
| continue$ } | |
| | defined method square(int) | |
| prompt$ | |
| ``` |