java JShell 怎么使用

Java JShell 是一个交互式 REPL(Read-Eval-Print Loop)工具,从 Java 9 开始引入。以下是使用指南:

1. 启动 JShell

bash 复制代码
# 直接启动
jshell

# 启动时指定模块路径
jshell --module-path <path>

# 启动时执行初始化脚本
jshell --startup <filename>

2. 基本操作

输入 Java 代码

java 复制代码
// 直接输入表达式
jshell> 2 + 2
$1 ==> 4

// 定义变量
jshell> int x = 10
x ==> 10

// 定义方法
jshell> String greet(String name) {
   ...>     return "Hello, " + name;
   ...> }
|  已创建 方法 greet(String)

// 调用方法
jshell> greet("World")
$3 ==> "Hello, World"

3. 常用命令

/help - 查看帮助

bash 复制代码
jshell> /help
jshell> /help intro      # 查看简介
jshell> /help shortcuts  # 查看快捷键

/list - 列出代码片段

bash 复制代码
jshell> /list            # 列出所有片段
jshell> /list -all       # 列出所有(包括自动生成的)
jshell> /list -start     # 列出启动代码

/vars - 查看变量

bash 复制代码
jshell> /vars
|    int x = 10

/methods - 查看方法

bash 复制代码
jshell> /methods
|    String greet(String)

/types - 查看类型

bash 复制代码
jshell> /types
|    class Person

/edit - 编辑代码

bash 复制代码
jshell> /edit greet      # 编辑特定方法
jshell> /edit 1          # 编辑第1个代码片段

/save/open

bash 复制代码
# 保存会话到文件
jshell> /save mysession.jsh

# 从文件加载代码
jshell> /open mysession.jsh

# 保存所有代码(包括自动生成的)
jshell> /save -all mysession.jsh

/drop - 删除代码片段

bash 复制代码
jshell> /drop x          # 删除变量x
jshell> /drop 1          # 删除第1个代码片段

/reset - 重置会话

bash 复制代码
jshell> /reset           # 重置所有状态

/exit - 退出

bash 复制代码
jshell> /exit

4. 实用特性

自动补全

bash 复制代码
# 按 Tab 键补全
jshell> Sys<Tab>         # 会自动补全为 System
jshell> System.<Tab>     # 显示 System 类的所有方法

查看导入

bash 复制代码
jshell> /imports         # 查看已导入的包

设置反馈模式

bash 复制代码
jshell> /set feedback verbose     # 详细模式
jshell> /set feedback concise     # 简洁模式
jshell> /set feedback normal      # 普通模式(默认)
jshell> /set feedback silent      # 静默模式

查看历史命令

bash 复制代码
jshell> /history         # 查看历史命令

5. 高级用法

创建类

java 复制代码
jshell> class Person {
   ...>     private String name;
   ...>     
   ...>     public Person(String name) {
   ...>         this.name = name;
   ...>     }
   ...>     
   ...>     public String getName() {
   ...>         return name;
   ...>     }
   ...> }
|  已创建 类 Person

jshell> Person p = new Person("Alice")
p ==> Person@5e91993f

jshell> p.getName()
$8 ==> "Alice"

异常处理

java 复制代码
jshell> try {
   ...>     int result = 10 / 0;
   ...> } catch (ArithmeticException e) {
   ...>     System.out.println("Error: " + e.getMessage());
   ...> }
Error: / by zero

使用外部库

bash 复制代码
# 启动时指定类路径
jshell --class-path lib/*.jar

6. 快捷操作

快捷键 功能
Ctrl+L 清屏
Ctrl+R 反向搜索历史
Ctrl+S 正向搜索历史
Ctrl+C 终止当前输入

7. 示例:快速测试代码

java 复制代码
// 快速测试算法
jshell> int[] numbers = {3, 1, 4, 1, 5, 9, 2, 6}
numbers ==> int[8] { 3, 1, 4, 1, 5, 9, 2, 6 }

jshell> Arrays.sort(numbers)
jshell> Arrays.toString(numbers)
$2 ==> "[1, 1, 2, 3, 4, 5, 6, 9]"

// 测试流操作
jshell> List<String> list = List.of("Java", "Python", "C++")
list ==> [Java, Python, C++]

jshell> list.stream().filter(s -> s.startsWith("J")).collect(Collectors.toList())
$3 ==> [Java]

8. 退出保存设置

bash 复制代码
# 设置自动保存历史
jshell> /set history permanent
jshell> /set start -retain mysetup.jsh

JShell 非常适合:

  • 快速测试代码片段
  • 学习 Java 语法
  • 原型设计和实验
  • 调试和探索 API
相关推荐
古法安卓2 小时前
Android-日志系统源码解析
android·java·android studio
小夏coding4 小时前
从"一把梭"到"精妙拆解" —— 滑动窗口计时框架的设计演进
java·后端
MacroZheng5 小时前
同事问我:"Claude Code经常失忆,不怕它把项目搞炸?",我:"怕,三个Markdown文件给它装个永不丢失的外置大脑!"
java·人工智能·后端
十年Java程序媛6 小时前
深度实战:JDK21 虚拟线程 + HikariCP 生产正确配比、坑点、监控全套
java·spring boot
xiaoqiMikko6 小时前
有人在搜一个不存在的 Tomcat 版本
java·tomcat
用户31268748772010 小时前
ConcurrentHashMap 怎么保证线程安全?从分段锁到 CAS+synchronized
java
vipxieliang10 小时前
ValidX vs Apache Commons Validator:功能与性能对比
java·spring boot
SimonKing10 小时前
升级Spring Boot 4后,从 Jackson 2 到 3,到底有哪些变化
java·后端·程序员
吃饱了得干活10 小时前
一篇讲清楚Spring Boot:自动装配、启动器、过滤器、拦截器、设计模式
java·spring boot·后端
lhldsg12 小时前
AI零售系统实战指南:从架构设计到落地部署全解析
java·人工智能·小程序·uni-app·零售