干货 |
您所在的位置:网站首页 › open命令用法 › 干货 |
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 worldjshell 同样可以创建接口及其实现类,下面的示例定义了一个接口 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 testjshell 中还可以直接声明变量、创建方法、调用方法,下面的示例中,定义了一个加法方法及两个变量,然后调用方法计算两个变量的和。 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 ==> 3jshell 可以直接输入 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 |