1. 什么是JShell
JShell是Java SE 9中引入的交互式编程环境。它提供了一个交互式的Shell界面,可以让开发者快速输入和测试Java代码片段。相较于在IDE中编写代码,JShell更加灵活、方便。
2. JShell中的有用命令
2.1 /help - 显示帮助信息
JShell中的/help命令可以输出所有可用命令的简要说明。这对于初学者来说是非常有用的。
/help
输出:
--- 常用命令 ---
/vars 打印所有定义的变量和方法。
/methods 打印所有可用的方法。
/types 打印所有可用的类型和包。
/reset 重新启动JShell。
/set feedback 设置反馈级别。
/list 列出最近编辑的代码。
/save [name] 保存供将来使用。
/open [name] 打开指定的JShell文件。
/close [name] 关闭指定的JShell文件。
/exit 退出JShell。
2.2 /vars - 显示所有定义的变量和方法
使用/vars命令可以查看JShell中定义的所有变量和方法。这对于需要调试代码时非常方便。
int a = 10;
String b = "Hello";
System.out.println(a);
System.out.println(b);
输出:
10
Hello
/vars
输出:
| int a = 10;
| String b = "Hello";
jshell>
2.3 /methods - 显示所有可用的方法
使用/methods命令可以显示JShell中可用的所有方法。它们可以是您定义的方法,也可以是Java库中的方法。
import java.util.Arrays;
Arrays.toString(new int[]{1,2,3});
输出:
[1, 2, 3]
/methods
输出:
| Arrays.toString(java.lang.Object[]) : java.lang.String
| Arrays.toString(short[]) : java.lang.String
| Arrays.toString(int[]) : java.lang.String
| Arrays.toString(char[]) : java.lang.String
| Arrays.toString(byte[]) : java.lang.String
| Arrays.toString(boolean[]) : java.lang.String
| Arrays.toString(float[]) : java.lang.String
| Arrays.toString(double[]) : java.lang.String
| Arrays.toString(java.lang.Object[],int,int) : java.lang.String
| ...
2.4 /types - 显示所有可用的类型和包
使用/types命令可以显示JShell中可用的所有类型和包。这些可以是Java SE中包含的类型和包或者您定义的类型和包。
System.out.println(Math.PI);
输出:
3.141592653589793
/types
输出:
| java.time.chrono.JapaneseChronology - class
| java.lang.Math - class
| java.util.logging.Level - class
| java.nio.charset.CharsetEncoder - class
| java.util.Map$Entry - interface
| java.util.FormatterClosedException - class
| java.util.Arrays - class
| java.util.NavigableMap - interface
| ...
2.5 /reset - 重新启动JShell
使用/reset命令可以清除JShell中的所有定义的变量、方法和类型。这对于需要重新开始编写新代码的情况非常有用。
int a = 10;
System.out.println(a);
/reset
输出:
| 欢迎使用Java版本 9 的JShell
| 类型变量 $1 等同于 Object
| 类型变量 $2 等同于 Object[]
| 类型变量 $3 等同于 java.util.List
| 类型变量 $4 等同于 java.util.List extends Object&java.io.Serializable>
| 类型变量 $5 等同于 java.util.List extends Object&java.lang.Comparable extends java.lang.Object>>
| 类型变量 $6 等同于 java.util.List extends Object&java.lang.Comparable super java.lang.String>>
| 类型变量 $7 等同于 java.util.List super String>
| 类型变量 $8 等同于 java.util.List
| 类型变量 $9 等同于 java.util.List,并有 1 限制(s)
| 类型变量 $10 等同于 java.util.List,并有 2 限制(s)
| 类型变量 $11 等同于 java.lang.String,非空
| 类型变量 $12 等同于 java.util.random.Random
| 类型变量 $13 等同于 java.net.URI
| 类型变量 $14 等同于 java.time.LocalDateTime
| 类型变量 $15 等同于 java.lang.Integer
| 类型变量 $16 等同于 java.util.Locale.Category
| 类型变量 $17 等同于 java.util.Locale.LanguageRange
| 类型变量 $18 等同于 java.security.Permission
| 类型变量 $19 等同于 java.time.format.DateTimeFormatter
| 类型变量 $20 等同于 java.lang.Boolean
| 类型变量 $21 等同于 java.time.LocalDateTime
| 类型变量 $22 等同于 java.net.URL
| 类型变量 $23 等同于 java.time.Instant
| 类型变量 $24 等同于 java.time.LocalDate
| ...
2.6 /set feedback - 设置反馈级别
JShell的/set feedback命令可以帮助开发者提高生产力并更好地理解其代码。它控制反馈级别,以便包括在JShell的响应中提供更多或更少的信息。
/set feedback verbose
int a = "Hello";
输出:
| 错误:
| 不兼容的类型: String无法转换为int
| int a = "Hello";
| ^---------^
jshell>
2.7 /list - 列出最近编辑的代码
JShell的/list命令可以列出最近编辑的代码。它可以让开发者回顾JShell历史,并在黑板上练习代码。
String a = "Hello";
String b = "World";
/list
输出:
1 : String a = "Hello";
2 : String b = "World";
2.8 /save - 保存代码
JShell的/save命令可以将代码片段保存到本地文件系统中。
/save /Users/Username/Desktop/HelloWorld.jsh
int a = 10;
System.out.println(a);
输出:
10
jshell>
2.9 /open - 打开JShell文件
JShell的/open命令可以打开本地文件系统中的文件,并将其中的代码片段插入到当前JShell会话中。
/open /Users/Username/Desktop/HelloWorld.jsh
输出:
1 :
2 : int a = 10;
3 : System.out.println(a);
4 :
5 :
2.10 /close - 关闭JShell文件
JShell的/close命令可以关闭本地文件系统中的文件,并从当前JShell会话中移除其中的所有代码片段。
/close /Users/Username/Desktop/HelloWorld.jsh
输出:
jshell>
2.11 /exit - 退出JShell
JShell的/exit命令可以退出JShell。
/exit
输出:
| 再见!
3. 总结
JShell提供了一种新的、交互式的方式来编写和测试Java代码。JShell中的命令可以帮助开发者更高效、更快速地编写代码,而不是在IDE中来回切换文件。在本文中,我们介绍了JShell中的一些有用命令,这些命令可以帮助您更好地了解JShell并提高您的生产力。