干货

您所在的位置:网站首页 open命令用法 干货

干货

2023-04-20 19:41| 来源: 网络整理| 查看: 265

JShell 简介

jshell 是 Java 9 新增的开发工具,可以用于执行 Java 代码并立即获得执行结果。支持定义变量、方法、类等,支持输入语句、表达式,支持导入外部 Java 源文件。按照官方的定义,jshell 里用到的小块 Java 代码被称为“片段”。

jshell 包含在 jdk 9 中,jdk 9 预计将于 9 月 21 日发布,现在可以从官网下载试用版本。打开后,显示页面如下。

基本使用

jshell 支持 Java 类、接口、enum,可以定义变量、方法,可以执行表达式、语句。下面的示例中,

① 首先定义一个 Test 类,jshell 能自动判断当前的输入没有结束,输入最后一个 } 后 jshell 提示 “已创建 类 Test”,此时类型创建成功;

② 创建一个 Test 的实例 o,语法和 Java 一样;

③ 调用对象 o 的 test 方法,执行结果符合预期,打印出“hello world”。

jshell> public class Test{ ...> public void test(){ ...> System.out.println("hello world"); ...> } ...> } | 已创建 类 Test jshell> Test o = new Test(); o ==> Test@4fe44c jshell> o.test(); hello world

jshell 同样可以创建接口及其实现类,下面的示例定义了一个接口 Inter,然后创建了一个实现类 InterImpl。

jshell> public interface Inter{ ...> public void interTest(); ...> } | 已创建 接口 Inter jshell> class InterImpl implements Inter{ ...> public void interTest(){ ...> System.out.println("inter test"); ...> } ...> } | 已创建 类 InterImpl jshell> Inter inter = new InterImpl(); inter ==> InterImpl@480dd7 jshell> inter.interTest(); inter test

jshell 中还可以直接声明变量、创建方法、调用方法,下面的示例中,定义了一个加法方法及两个变量,然后调用方法计算两个变量的和。

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

jshell 可以直接输入 Java 表达式,计算出表达式的结果,然后返回。在下面的示例中,演示了表达式的执行。

jshell> 1+2 $1 ==> 3 jshell> int x = 1; x ==> 1 jshell> x > 0 ? "big" : "little" $3 ==> "big"

jshell 还支持读取外部文件,导入其中的片段,并执行其中的片段。在下面的示例中,导入了外部文件,文件中定义了输出片段,使用 /open 命令执行。

主要命令

输入 /help 可以看到 jshell 支持的主要命令。jshell 除了支持表达式、语句、声明外,还支持以下命令。

命令: /list [|-all|-start]

功能:显示前面带有片段 ID 的片段源。

使用方法:

/list 列出您键入的或使用 /open 读取的当前活动的代码片段 /list -start 列出自动评估的启动片段 /list -all 列出所有片段, 包括失败的片段, 覆盖的片段, 删除的片段和启动片段 /list 列出具有指定名称的片段 (特别是活动片段) /list 列出具有指定片段 ID 的片段

示例:

jshell> /list 1 : public class Test{ public static void main(String[] args){ System.out.println("Hello world"); } } 2 : String[] str = {"test"}; 3 : Test.main(str)

命令: /edit

功能:在外部编辑器中编辑源的片段。使用 /set editor 可以设置要使用的编辑器。如果尚未设置编辑器, 则将启动一个简单的编辑器。

使用方法:

/edit 编辑具有指定名称的片段 (特别是活动片段) /edit 编辑具有指定片段 id 的片段 /edit 编辑您键入或使用 /open 读取的当前活动的代码片段

示例:

命令: /drop

功能:删除片段 -- 使片段处于不活动状态。

使用方法:

/drop 删除具有指定名称的片段 /drop 删除具有指定片段 id 的片段

示例:删除前文中的片段3

jshell> /drop 3 jshell> /list 1 : public class Test{ public static void main(String[] args){ System.out.println("Hello world"); } } 2 : String[] str = {"test"};

命令: /save [-all|-history|-start]

功能:将指定的片段和/或命令保存到指定文件。

使用方法:

/save 将当前活动片段的源保存到文件 /save -all 将所有片段的源保存到文件 这包括覆盖的源, 失败的源以及启动代码 /save -history 保存自启动 jshell 以来输入的所有命令和片段的顺序历史记录 /save -start 将当前启动定义保存到文件

示例:列出所有的片段,并保存到指定的文件。

命令:/open

功能:打开文件并读取其内容作为片段和命令。

使用方法:

/open 读取指定的文件作为 jshell 输入

示例:读取外部文件并执行。

命令: /vars [|-all|-start]

功能: 列出 jshell 变量的类型, 名称和值。

使用方法:

/vars 列出当前活动的 jshell 变量的类型, 名称和值 /vars 列出具有指定名称的 jshell 变量 (特别是活动变量) /vars 列出具有指定片段 ID 的 jshell 变量 /vars -start 列出自动添加的启动 jshell 变量 /vars -all 列出所有 jshell 变量, 包括已失败变量, 已覆盖变量, 已删除变量和启动变量

示例:列出所有变量

jshell> /vars String[] str = String[1] { "test" }

命令:/methods [|-all|-start]

功能:列出 jshell 方法的名称, 参数类型以及返回类型。

使用方法:

/methods 列出当前活动 jshell 方法名称, 参数类型和返回类型 /methods 列出具有指定名称的 jshell 方法 (特别是活动方法) /methods 列出具有指定片段 ID 的 jshell 方法 /methods -start 列出自动添加的启动 jshell 方法 /methods -all 列出所有片段, 包括已失败片段, 已覆盖片段, 已删除片段和启动片段

示例:创建一个方法,列出所有方法,最后执行方法。

jshell> int add(int a,int b){return a+b;} 已创建 方法 add(int,int) jshell> /methods int add(int,int) jshell> add(1,2) $8 ==> 3

命令:/types [|-all|-start]

功能:列出 jshell 类, 接口和枚举。

使用方法:

/types 列出当前活动 jshell 类, 接口和枚举 /types 列出具有指定名称的 jshell 类型 (特别是活动类型) /types 列出具有指定片段 ID 的 jshell 类型 /types -start 列出自动添加的启动 jshell 类型 /types -all 列出所有 jshell 类型, 包括已失败, 已覆盖, 已删除和启动类型

示例:创建一个接口,然后列出当前活动 jshell 类,接口和枚举。

jshell> interface inter{public void test();} 已创建 接口 inter jshell> /types class Test class OpenTest interface inter

命令:/imports

功能:列出当前活动的 jshell 导入。

示例:

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.*

命令:/exit

功能:退出 jshell

命令:/env [-class-path ] [-module-path ] [-add-modules ] ...

功能:查看或更改上下文。上下文是类路径,模块路径等等。

使用方法:

/env [-class-path ] [-module-path ] [-add-modules ] ... 在至少设置一个选项的情况下, 设置评估上下文。如果 已定义片段, 则将使用新评估上下文重置 执行状态, 并且将重放片段 -- 不显示 重放, 但是将显示错误。这等同于: /reload -quiet 有关上下文选项的详细信息, 请参阅:/help context

示例:

/env -add-modules com.greetings

命令:/reset [-class-path ] [-module-path ] [-add-modules ]...

功能:重置 jshell 工具代码和执行状态,所有输入的代码都将丢失,重新执行启动代码,重新启动执行状态。

使用方法:

/reset [-class-path ] [-module-path ] [-add-modules ]...

命令:/reload [-restore] [-quiet] [-class-path ] [-module-path ]...

功能:重置 jshell 工具代码和执行状态, 然后按照各有效片段和任何 /drop 或 /classpath 命令的输入顺序重放它们。

使用方法:

/reload 重置和重放自进入 jshell 以来的有效历史记录, 或者执行 /reset 或 /reload 命令中最新的那个 命令。 /reload -restore 重置并重放上一次进入 jshell 与最近进入 jshell 之间的有效历史记录, 或者执行 /reset 或 /reload 命令。这进而可用于还原上一个 jshell 工具会话。 /reload [-restore] -quiet 使用 ‘-quiet’ 参数时, 不显示重放,将显示错误。 reload 接受上下文选项,有关上下文选项的详细信息, 请参阅:/help context

示例:

jshell> /reload | 正在重新启动并还原状态。 -: public class Test{ public static void main(String[] args){ System.out.println("Hello world"); } } -: String[] str = {"test"}; -: Test.main(str) Hello world -: /drop 3

命令:/history

功能:显示自启动此 jshell 以来输入的片段和命令的历史记录。

命令:/set editor|start|feedback|mode|prompt|truncation|format ...

功能:设置 jshell 配置信息,包括要使用的外部编辑器、要使用的启动定义、新的反馈模式、命令提示符、要使用的反馈模式或输出的格式。

使用方法:

/set editor [-wait] ... 指定要为 /edit 命令启动的命令 是与操作系统相关的字符串 /set start 指定 的内容将成为默认启动片段和命令 /set feedback 设置用于描述为所输入片段和命令显示的反馈的反馈模式 /set mode [] -command|-quiet|-delete 创建或更新用户定义的反馈模式, 可以选择从现有模式复制 /set prompt "" "" 设置为给定反馈模式显示的提示符 /set truncation ... 设置显示值的最大长度 /set format "" ... 通过设置当选择器匹配时字段的格式来配置反馈模式 /set 以 /set 命令形式显示编辑器, 启动和反馈设置 要显示以上任意项的设置, 请忽略 set 值

示例:

jshell> /set | /set editor -default | /set start -default | /set feedback normal | | 可用的反馈模式: | concise | normal | silent | verbose

命令:/? [|]

功能:获取 jshell 的相关信息,是 help 的缩写,可以查询命令的使用方法。

命令:/!

功能:重新运行上一个片段

命令:/

功能:按 id 重新运行片段

命令:/-

功能:重新运行前面的第 n 个片段

分享学习笔记和技术总结,内容涉及 Java 进阶、虚拟机、MySQL、NoSQL、分布式计算、开源框架等多个领域。关注作者或微信公众号 后端开发那点事儿 第一时间获取最新内容。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3