Java 9+ 能直接运行 jshell,但需先确认 JDK 版本≥9 且 jshell 在 PATH 中;常用参数有 -q、--no-startup、--startup;导入外部 JAR 需先 /env -class-path 再 import;退出用 /exit,清空用 /reset,保存用 /save。

Java 9+ 能直接运行 jshell 吗?先确认 JDK 版本和 PATH
不能盲目敲 jshell 就以为启动了——很多人的失败卡在第一步:JDK 根本没装对,或者装了但没进 PATH。
检查方式很简单:
- 终端执行
java -version,输出必须是9或更高(如17.0.1、21),1.8及以下版本不带jshell - 再执行
which jshell(macOS/Linux)或where jshell(Windows),没结果说明JDK/bin没加进环境变量 - 常见坑:装了 JRE(不是 JDK)、用了第三方精简版 JDK(如某些 IDE 自带的 JRE)、Mac 上用 Homebrew 装了多个 JDK 但未用
java_home -s切换
启动 jshell 时传什么参数最实用?别一上来就加 --startup
jshell 默认启动极轻量,加参数前先想清楚需求:是临时试语法?还是想每次进都加载常用类?
-
jshell -q:静默模式,跳过欢迎页和版本提示,适合快速验证小表达式 -
jshell --no-startup:禁用默认启动脚本(比如你发现一进去就报错Exception in startup script,大概率是~/.jshell/startup.jsh里写了非法语句 -
jshell --startup=mylib.jsh:自定义初始化脚本,但注意路径必须是绝对路径或当前目录下的相对路径;脚本里不能用import static以外的静态导入,否则可能触发早期解析失败 - 别乱用
--class-path:它只影响jshell内部编译器的 classpath,不影响你后续/env -class-path动态追加的路径
jshell 里怎么导入外部 JAR?/env -class-path 和 import 不是一回事
很多人以为写个 import org.apache.commons.lang3.StringUtils; 就能用 Apache Commons,结果报 cannot find symbol——缺的是类文件,不是 import 语句。
立即学习“Java免费学习笔记(深入)”;
- 先用
/env -class-path /path/to/commons-lang3-3.12.0.jar把 JAR 加进运行时 classpath(注意:路径中不能有空格,否则要加引号,且 Windows 下用分号;分隔多个路径) - 再手动
import类:import org.apache.commons.lang3.StringUtils;,这步不可省,jshell不自动推导包名 - 常见错误:
/env -class-path后忘记回车执行,或路径写成./lib/commons.jar但当前工作目录不是你认为的那个目录(建议用pwd确认) - 性能提示:加太多 JAR 会拖慢
jshell启动和代码补全响应,日常调试建议只加真正需要的
退出、重置、保存历史记录:别让 jshell 状态越积越乱
jshell 的状态是累积的:变量、方法、类定义都在内存里,关掉再开也不会清空——除非你主动干预。
- 退出用
/exit,不是Ctrl+D(后者在某些终端下会直接 kill 进程,导致历史没保存) - 清空当前会话所有定义:用
/reset,它会删掉所有变量、方法、类,但保留已设置的 classpath 和 import 规则 - 想保存当前 session 的所有输入?用
/save mysession.jsh,生成的是纯文本脚本,可被其他jshell用--startup加载 - 容易忽略的点:历史记录默认存在
~/.jshell/jshell_hist,但只存命令行,不存执行结果;如果换了机器或重装系统,这个文件不会同步











