跳至主要內容

Java 9 新特性:交互式编程环境JShell

会敲代码的程序猿原创JavaJava Features大约 5 分钟

Java 9 新特性:交互式编程环境JShell

JShell 是 Java 9 引入的一个交互式编程环境,它是 Java 编程语言的 REPL(Read-Eval-Print Loop)实现。 REPL 是一种编程环境,允许用户输入表达式并立即看到结果,而无需事先编写和编译完整的程序。 JShell 的目标是提供一个轻量级、灵活且易于使用的工具,使得 Java 开发者能够更直观地编写和测试代码。

JShell快速入门

启动JShell

打开终端,然后执行命令:jshell,执行效果如下:

~ jshell
|  欢迎使用 JShell -- 版本 9
|  要大致了解该版本, 请键入: /help intro

jshell>

帮助介绍 /help intro

执行 /help intro 命令以获取有关 JShell 工具的简要介绍,intro 是主题,提供了关于 jshell 工具的核心概念和使用方法的信息。

jshell> /help intro
|
|                                   intro
|                                   =====
|
|  使用 jshell 工具可以执行 Java 代码,从而立即获取结果。
|  您可以输入 Java 定义(变量、方法、类等等),例如:int x = 8
|  或 Java 表达式,例如:x + x
|  或 Java 语句或导入。
|  这些小块的 Java 代码称为“片段”。
|
|  这些 jshell 工具命令还可以让您了解和
|  控制您正在执行的操作,例如:/list
|
|  有关命令的列表,请执行:/help

jshell>

定义变量、方法、类

// 定义变量
jshell> int x = 8
x ==> 8

// 定义方法
jshell> int square(int num) {
   ...>     return num * num;
   ...> }
|  已创建 方法 square(int)

// 定义类
jshell> public class Message{
   ...>     private String msg;
   ...>     public Message(String msg){
   ...>         this.msg = msg;
   ...>     }
   ...>     public String getMessage(){
   ...>         return msg;
   ...>     }
   ...> }
|  已创建 类 Message

jshell>

执行表达式、调用方法

// 执行 Java 表达式
jshell> x + x
$4 ==> 16

// 调用方法
jshell> square(5)
$5 ==> 25

    
// 创建类实例并调用方法
jshell> Message messageObj = new Message("Hello, JShell!");
messageObj ==> Message@6d4b1c02

jshell> messageObj.getMessage()

$7 ==> "Hello, JShell!"

查看定义的变量:/vars

jshell> /vars
|    int x = 8
|    int $4 = 16
|    int $5 = 25
|    Message messageObj = Message@6d4b1c02
|    String $7 = "Hello, JShell!"

查看定义的方法:/methods

jshell> /methods
|    int square(int)

查看定义的类:/types

jshell> /types
|    class Message

列出输入源条目:/list

执行后,可以看到之前在jshell中输入的内容清单:

jshell> /list

   1 : int x = 8;
   2 : int square(int num) {
           return num * num;
       }
   3 : public class Message{
           private String msg;
           public Message(String msg){
               this.msg = msg;
           }
           public String getMessage(){
               return msg;
           }
       }
   4 : x + x
   5 : square(5)
   6 : Message messageObj = new Message("Hello, JShell!");
   7 : messageObj.getMessage()

jshell>

编辑源条目:/edit

上面通过/list列出了输入的条目信息,下面试试通过/edit编辑下,比如:

jshell> /edit 2

这将打开编辑器,修改先前定义的 square 方法。

修改完成后,点击 accept 即可

删除源条目:/drop

使用 /drop 命令可以删除之前输入的源代码块。可以通过指定名称ID 删除特定的源代码块。例如:

jshell> /drop Message
|  已删除 类 Message

这将删除之前定义的 Message 类。

保存文件:/save

通过 /save 命令,您可以将 JShell 中的源代码保存到文件中,以便将其保留或与他人共享。例如:

jshell> /save myCode.java

这将把当前所有的源代码保存到一个名为 myCode.java 的文件中。

打开文件:/open

使用 /open 命令可以将文件的内容导入到 JShell 中,以便重新使用或修改。例如:

jshell> /open myCode.java

这将导入之前保存的 myCode.java 文件中的源代码。

重置jshell:/reset

使用 /reset 命令可以清空 JShell 的状态,包括所有定义的变量、方法和类。例如:

jshell> /reset
|  正在重置状态

这将重置 JShell 并清除所有之前定义的内容。

查看引入的包:/imports

使用 /imports 命令可以查看当前已经导入的包。这对于确保您在 JShell 中能够访问所需的类和方法非常有用。例如:

jshell> /imports
|    import java.util.*

这表明已经导入了 java.util 包。

退出jshell:/exit

使用 /exit 命令可以退出 JShell。如果需要,在命令后可以添加一个整数表达式片段作为退出代码。例如:

jshell> /exit 0

这将以退出代码 0 退出 JShell。

查看命令:/help

最后,使用 /help 命令可以随时查看 JShell 的帮助信息,了解各种命令和主题的使用方法。例如:

jshell> /help
|  键入 Java 语言表达式, 语句或声明。
|  或者键入以下命令之一:
|  /list [<名称或 id>|-all|-start]
|  	列出您键入的源
|  /edit <名称或 id>
|  	编辑源条目
|  /drop <名称或 id>
|  	删除源条目
|  /save [-all|-history|-start] <文件>
|  	将片段源保存到文件
|  /open <file>
|  	打开文件作为源输入
|  /vars [<名称或 id>|-all|-start]
|  	列出已声明变量及其值
|  /methods [<名称或 id>|-all|-start]
|  	列出已声明方法及其签名
|  /types [<名称或 id>|-all|-start]
|  	列出类型声明
|  /imports 
|  	列出导入的项
|  /exit [<integer-expression-snippet>]
|  	退出 jshell 工具
|  /env [-class-path <路径>] [-module-path <路径>] [-add-modules <模块>] ...
|  	查看或更改评估上下文
|  /reset [-class-path <路径>] [-module-path <路径>] [-add-modules <模块>]...
|  	重置 jshell 工具
|  /reload [-restore] [-quiet] [-class-path <路径>] [-module-path <路径>]...
|  	重置和重放相关历史记录 -- 当前历史记录或上一个历史记录 (-restore)
|  /history [-all]
|  	您键入的内容的历史记录
|  /help [<command>|<subject>]
|  	获取有关使用 jshell 工具的信息
|  /set editor|start|feedback|mode|prompt|truncation|format ...
|  	设置配置信息
|  /? [<command>|<subject>]
|  	获取有关使用 jshell 工具的信息
|  /! 
|  	重新运行上一个片段 -- 请参阅 /help rerun
|  /<id> 
|IDID 范围重新运行片段 -- 参见 /help rerun
|  /-<n> 
|  	重新运行以前的第 n 个片段 -- 请参阅 /help rerun
|  
|  有关详细信息, 请键入 '/help', 后跟
|  命令或主题的名称。
|  例如 '/help /list' 或 '/help intro'。主题:
|  
|  intro
|  	jshell 工具的简介
|  keys
|  	类似 readline 的输入编辑的说明
|  id
|  	片段 ID 以及如何使用它们的说明
|  shortcuts
|  	片段和命令输入提示, 信息访问以及
|  	自动代码生成的按键说明
|  context
|  	/env /reload 和 /reset 的评估上下文选项的说明
|  rerun
|  	重新评估以前输入片段的方法的说明

jshell> 

这将显示 JShell 的主要帮助信息。