熟悉 Python 和 Scala 之类的语言的小伙伴应该知道,他们在很早就已经有了交互式编程环境 REPL(Read-Eval-Print Loop),REPL 以交互式的方式对语句和表达式进行求值。REPL 提供了一个交互式的方式,允许开发人员输入代码,立即执行它,无需编译,然后查看执行结果。
Java 在 Java 9 引入 Java 版的 REPL 工具:Java Shell。
- JShell 不能代替 IDE,它只能作为辅助和便捷的工具而已
JShell
Java Shell 是 Java 在 Java 9 中引入的一个交互式编程工具,它可以让开发人员能够在一个命令行界面即时编写、编辑和执行Java代码片段,而无需创建和编译传统的Java源代码文件。
JShell的目的是提供一个更快速、更便捷的方式来学习和测试Java代码,以及进行原型设计和实验性编程。它主要有如下几个特点:
- 即时反馈:可以立即查看代码的输出,不需要等待编译和运行整个Java应用程序。
- 代码片段:您可以编写单个Java表达式、语句或方法,并在JShell中立即执行它们。这对于测试和验证代码的特定部分非常有用。
- 自动导入:JShell自动导入常见的Java类和包,因此您无需手动导入它们,使代码编写更加简洁。
- 脚本化:我们可以将多个命令保存在脚本文件中,并使用JShell执行这些脚本。
JShell 通常用于教学、快速原型设计和测试,以及在 Java 开发中进行快速的探索性编程,但是它不适用于开发大型的Java应用程序。
应用
要使用 JShell 必须安装 JDK 9 或更高版本
chenssy@chenssydeMacBook-Pro ~ jshell | 欢迎使用 JShell -- 版本 17.0.8 | 要大致了解该版本, 请键入: /help intro
|
jshell> int a = 1; a ==> 1 jshell> int b = 2; b ==> 2
|
jshell> int add(int x,int y) { ...> return x + y; ...> } | 已创建 方法 add(int,int)
|
jshell> int c = add(a,b) c ==> 3
|
jshell> 1 + 2 $6 ==> 3 jshell> 1 > 2 ? "死磕 Java 并发" : "死磕 Java 新特性" $7 ==> "死磕 Java 新特性" jshell>
|
jshell> public class SKTest{ ...> public void test(){ ...> System.out.println("死磕 Java 就是牛"); ...> } ...> } | 已创建 类 SKTest jshell> SKTest skTest = new SKTest(); skTest ==> SKTest@17a7cec2 jshell> skTest.test(); 死磕 Java 就是牛
|
jshell> public interface UserService{ ...> void test(); ...> } | 已创建 接口 UserService jshell> public class UserServiceImpl implements UserService{ ...> public void test(){ ...> System.out.println("死磕 Java 新特性就是牛..."); ...> } ...> } | 已创建 类 UserServiceImpl jshell> UserService userService = new UserServiceImpl(); userService ==> UserServiceImpl@4783da3f jshell> userService.test();
|
主要命令
| 命令 |
描述 |
/help (或 /?) |
查看可用命令的帮助信息,或获取特定命令的详细信息 |
/list (或 /l) |
列出当前已经输入的代码片段 |
/edit (或 /e) |
编辑以前输入的代码片段 |
/drop (或 /d) |
删除以前输入的代码片段 |
/save (或 /s) |
将当前会话中的代码保存到文件中 |
/open (或 /o) |
从文件中加载代码以继续会话 |
/reset |
重置JShell环境,清除所有已输入的代码片段 |
/vars (或 /v) |
查看当前定义的所有变量 |
/methods (或 /m) |
查看当前定义的所有方法 |
/types (或 /t) |
查看当前定义的所有类型 |
/imports (或 /i) |
查看当前导入的包和类 |
/set (或 /s) |
设置JShell的各种选项,如类路径、编辑器、输出格式等 |
/classpath (或 /cp) |
查看或设置类路径,以便加载外部类和库 |
/history (或 /h) |
查看和搜索JShell历史记录 |