java9新特性-jshell命令

熟悉 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 或更高版本

  • 启动JShell
 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>
  • 创建JAVA类
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历史记录