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

博客 分享
0 110
张三
张三 2022-05-20 08:59:27
悬赏:0 积分 收藏

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

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

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

JShell快速入门

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

启动JShell

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

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

执行计算

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

jshell> 1+2$1 ==> 3

定义变量

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

jshell> int a=1, b=2;a ==> 1b ==> 2jshell> int c = a + bc ==> 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;   ...>     }   ...> }|  已创建 类 Calculatejshell> Calculate c = new Calculate();c ==> Calculate@4fca772djshell> c.a = 1$9 ==> 1jshell> c.b = 2$10 ==> 2jshell> 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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

posted @ 2022-05-20 08:47 程序猿DD 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员