产生背景 : 像 Python 和 Scala 之类的语言早就有交互式编程环境 REPL (read - evaluate - print - loop),以交互式的方式对语句和表达式进行求值。开发者只需要输入一些代码,就可以在编译前获得对程序的反馈。而之前的 Java 版本要想执行代码,必须创建文件、 声明类、 提供测试方法方可实现
设计理念 : 即写即得、快速运行
Java 9 中终于拥有 REPL 工具 : jShell。利用 jShell 在没有创建类的情况下直接声明变量,计算表达式,执行语句。 即开发时可以在命令行里直接运行 java 的代码,而无需创建 Java 文件, 无需跟人解释 "public static void main(String[] args)" 这句废话。jShell 也可以从文件中加载语句或者将语句保存到文件中,也可以是 tab 键进行自动补全和自动添加分号
使用 Tab 键能够帮助自动补全代码
调出 jShell
$ jshell
| 欢迎使用 JShell -- 版本 9.0.4
| 要大致了解该版本, 请键入: /help intro
获取帮助
jshell> /help intro
|
| intro
|
| 使用 jshell 工具可以执行 Java 代码, 从而立即获取结果。
| 您可以输入 Java 定义 (变量, 方法, 类, 等等), 例如: int x = 8
| 或 Java 表达式, 例如: x + x
| 或 Java 语句或导入。
| 这些小块的 Java 代码称为 '片段'。
|
| 这些 jshell 命令还可以让您了解和
| 控制您正在执行的操作, 例如: /list
|
| 有关命令的列表, 请执行: /help
jshell> / # 显示可用指令
/! /? /drop /edit /env /exit
/help /history /imports /list /methods /open
/reload /reset /save /set /types /vars
<再次按 Tab 可查看提要>
注 : 在 JShell 环境下,语句末尾的 ";" 是可选的,但推荐还是最好加上,提高代码可读性
导入包
# 导入指定的包
jshell> import java.util.*;
# 显示默认已导入的包
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.*
列出当前 session 里所有有效的代码片段
jshell> /list
1 : System.out.println("Hello,world");
2 : int i = 10;
3 : int j = 20;
4 : i+j
查看当前 session 下所有创建过的变量
jshell> /vars
| int i = 10
| int j = 20
| int $4 = 30
查看当前 session 下所有创建过的方法
jshell> /methods
| void add(int,int)
注 : 还可以重新定义相同方法名和参数列表的方法,即为对现有方法的修改 (或覆盖)
使用外部代码编辑器来编写 Java 代码
jshell> /edit add
引入外部 java 文件
jshell> /open /Users/chenshun131/Desktop/AllMyFile/HelloWorld.java
没有受检异常 (编译时异常) : 本来应该强迫捕获一个 IOException,但却没有出现,因为 jShell 在后台为我们隐藏
jshell> URL url = new URL("http://www.atguigu.com");
退出 jShell
jshell> exit