• 一文学会Java的交互式编程环境jshell


    什么是交互式编程环境?重点词交互,在这样的编程环境中,你每输入一行代码,环境都会给你一个反馈,这就是交互式的编程环境。这种编程环境并不太适合工程化的复杂性需求,但在一些快速验证、简单计算之类的场景下还是非常好用的。其实交互式编程环境在其他高级语言中很早就有了,而Java直到Java 9才正式推出了这样的工具。

    下面就来一起学习下,这个Java中的交互式编程环境JShell

    JShell快速入门

    本期视频:7分钟学会如何使用Java的交互式编程环境jshell

    启动JShell

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

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

    执行计算

    在jshell中可以快速的执行计算操作并获得结果,比如这样:

    jshell> 1+2
    $1 ==> 3
    

    定义变量

    在jshell中也可以定义变量与函数,比如,你可以这样定义变量,并进行计算:

    jshell> int a=1, b=2;
    a ==> 1
    b ==> 2
    
    jshell> int c = a + b
    c ==> 3
    

    定义函数

    在jshell中也可以函数来封装操作,比如下面就是一个定义求和函数并调用它的例子:

    jshell> int sum(int a, int b){
       ...>     return a + b;
       ...> }
    |  已创建 方法 sum(int,int)
    
    jshell> int c = sum(1, 2)
    c ==> 3
    

    定义类

    在jshell中,定义一些简单的类,也是可以实现的,比如:

    jshell> public class Calculate {
       ...>
       ...>     public int a;
       ...>     public int b;
       ...>
       ...>     public int sum() {
       ...>         return a + b;
       ...>     }
       ...> }
    |  已创建 类 Calculate
    
    jshell> Calculate c = new Calculate();
    c ==> Calculate@4fca772d
    
    jshell> c.a = 1
    $9 ==> 1
    
    jshell> c.b = 2
    $10 ==> 2
    
    jshell> c.sum()
    $11 ==> 3
    

    当然了,这种场景其实就已经比较复杂了,这里其实搭配Java 16中新增的record来实现的话,会简单实用一些。

    本文收录在了我正在连载的《Java新特性专栏》,该系列该用电子书的方式编写,如果想要沉浸式阅读学习的话,可以访问Web版本:https://www.didispace.com/java-features/

    https://www.didispace.com/java-features/

    查看命令:/help

    关于jshell常用命令,我们可以通过/help来查看

    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>
    |  	按 ID 或 ID 范围重新运行片段 -- 参见 /help rerun
    |  /-<n>
    |  	重新运行以前的第 n 个片段 -- 请参阅 /help rerun
    |
    |  有关详细信息, 请键入 '/help', 后跟
    |  命令或主题的名称。
    |  例如 '/help /list' 或 '/help intro'。主题:
    |
    |  intro
    |  	jshell 工具的简介
    |  keys
    |  	类似 readline 的输入编辑的说明
    |  id
    |  	片段 ID 以及如何使用它们的说明
    |  shortcuts
    |  	片段和命令输入提示, 信息访问以及
    |  	自动代码生成的按键说明
    |  context
    |  	/env /reload 和 /reset 的评估上下文选项的说明
    |  rerun
    |  	重新评估以前输入片段的方法的说明
    
    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>
    |  	按 ID 或 ID 范围重新运行片段 -- 参见 /help rerun
    |  /-<n>
    |  	重新运行以前的第 n 个片段 -- 请参阅 /help rerun
    |
    |  有关详细信息, 请键入 '/help', 后跟
    |  命令或主题的名称。
    |  例如 '/help /list' 或 '/help intro'。主题:
    |
    |  intro
    |  	jshell 工具的简介
    |  keys
    |  	类似 readline 的输入编辑的说明
    |  id
    |  	片段 ID 以及如何使用它们的说明
    |  shortcuts
    |  	片段和命令输入提示, 信息访问以及
    |  	自动代码生成的按键说明
    |  context
    |  	/env /reload 和 /reset 的评估上下文选项的说明
    |  rerun
    |  	重新评估以前输入片段的方法的说明
    

    查看定义的函数:/methods

    jshell> /methods
    |    int sum(int,int)
    

    查看定义的变量:/vars

    jshell> /vars
    |    int $1 = 3
    |    int b = 2
    |    Calculate c = Calculate@4fca772d
    |    int $9 = 1
    |    int $10 = 2
    |    int $11 = 3
    |    int $13 = 3
    

    列出输入源条目:/list

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

    jshell> /list
    
       1 : 1+2
       3 : int a=1, b=2;
       5 : int sum(int a, int b){
               return a + b;
           }
       7 : public class Calculate {
    
               public int a;
               public int b;
    
               public int sum() {
                   return a + b;
               }
           }
       8 : Calculate c = new Calculate();
       9 : c.a = 1
      10 : c.b = 2
      11 : c.sum()
      12 : Map a = new HashMap();
    

    左侧的数字为条目id,可以利用该id,进行编辑和删除操作

    编辑源条目:/edit

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

    jshell> /edit 7
    

    此时会弹出修改框:

    修改完成后,点击accept即可

    删除源条目:/drop

    /drop命令可以用来删除某个源条目,比如我们可以用下面的命令删除id为12的那行Map a = new HashMap();

    jshell> /drop 12
    |  已删除 变量 a
    

    可以看到,执行后,也给出了提示:定义的Map类型的a变量删除了。

    保存文件:/save

    如果想把这次编辑的内容保存下来,以便到其他环境执行,或者下次继续使用的话,可以通过/save来保存到文件里,比如这样:

    jshell> /save aaa.txt
    

    打开文件:/open

    当我们换了一个jshell环境后,可以通过打开之前保存的文件来快速还原之前的执行内容,比如:

    jshell> /open aaa.txt
    

    重置jshell:/reset

    当我们要换一个内容编写的时候,需要清空之前执行的条目(清空/list的内容),这个时候就可以这样来实现:

    jshell> /reset
    |  正在重置状态。
    

    查看引入的包:/imports

    jshell> /imports
    |    import java.io.*
    |    import java.math.*
    |    import java.net.*
    |    import java.nio.file.*
    |    import java.util.*
    |    import java.util.concurrent.*
    |    import java.util.function.*
    |    import java.util.prefs.*
    |    import java.util.regex.*
    |    import java.util.stream.*
    

    查看定义的类:/types

    jshell> /types
    |    class Calculate
    

    退出jshell:/exit

    jshell> /exit
    | Goodbye 
    

    好了,今天的分享就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群,参与交流与讨论,更好的学习与进步!

    另外,不要走开,关注我!持续更新Java新特性专栏

    欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

  • 相关阅读:
    【转】EDK简单使用流程(3)
    【转】应用 printf 语句格式化输出字符
    【转】[FPGA博客大赛](updated)在xilinx的FPGA系统中scanf函数的使用
    BZOJ 1083 [SCOI2005]繁忙的都市
    BZOJ 2821 分块统计
    BZOJ 1034 [ZJOI2008]泡泡堂BNB
    BZOJ 1029 [JSOI2007]建筑抢修
    BZOJ 1096 [ZJOI2007]仓库建设
    BZOJ 1070 [SCOI2007]修车
    BZOJ 1040 [ZJOI2008]骑士
  • 原文地址:https://www.cnblogs.com/didispace/p/16291094.html
Copyright © 2020-2023  润新知