Java 9 JShell REPL:交互式编码与测试利器
JShell 简介
JShell(Java Shell)实现 REPL(Read-Eval-Print Loop),在命令行即时执行 Java 代码片段,无需编写完整类、编译、运行,极大提升探索、原型验证、教学效率。
启动与基础命令
$ jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell>
常用命令
| 命令 | 功能 |
|---|---|
/help | 显示帮助 |
/list | 列出已输入片段 |
/edit <id> | 编辑指定片段 |
/drop <id> | 删除片段 |
/save [-all|-history|-start] <file> | 保存片段到文件 |
/open <file> | 加载文件作为输入 |
/vars | 列出变量及值 |
/methods | 列出方法签名 |
/types | 列出类型声明 |
/imports | 列出当前导入 |
/exit | 退出 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.*
交互式计算与变量
jshell> 3 + 1
$1 ==> 4
jshell> 13 % 7
$2 ==> 6
jshell> $2
$2 ==> 6
jshell> var x = 10
x ==> 10
jshell> x * 2
$3 ==> 20
$1、$2 为自动生成的临时变量名,可直接引用。
定义与使用方法
jshell> int doubled(int i) { return i * 2; }
| created method doubled(int)
jshell> doubled(6)
$4 ==> 12
定义类与复杂逻辑
jshell> class Person { String name; int age; Person(String n, int a) { name=n; age=a; } }
| created class Person
jshell> new Person("Alice", 30)
$5 ==> Person@...
jshell> $5.name
$6 ==> "Alice"
实用场景
- API 快速验证:测试集合操作、流处理、正则表达式、日期格式化。
- 算法原型:即时迭代优化逻辑,再迁移至工程代码。
- 教学演示:直观展示语法、语义、异常行为。
- 脚本化任务:配合
/open执行代码片段文件。
退出
jshell> /exit
| Goodbye
java
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java if…else:控制流全解析
- 精通 Java 增强 for 循环:语法、示例与最佳实践
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java 匿名内部类:定义、语法与实战示例
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
- 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
- Java 9 JShell REPL:交互式编码与测试利器