Java 9 新特性—REPL 工具:JSheel 命令

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

熟悉 Python 和 Scala 之类的语言的小伙伴应该知道,他们在很早就已经有了交互式编程环境 REPLRead-Eval-Print Loop),REPL 以交互式的方式对语句和表达式进行求值。REPL 提供了一个交互式的方式,允许开发人员输入代码,立即执行它,无需编译,然后查看执行结果。

Java 在 Java 9 引入 Java 版的 REPL 工具:Java Shell

什么是 JShell

Java Shell 是 Java 在 Java 9 中引入的一个交互式编程工具,它可以让开发人员能够在一个命令行界面即时编写、编辑和执行Java代码片段,而无需创建和编译传统的Java源代码文件。

JShell的目的是提供一个更快速、更便捷的方式来学习和测试Java代码,以及进行原型设计和实验性编程。它主要有如下几个特点:

  1. 即时反馈:可以立即查看代码的输出,不需要等待编译和运行整个Java应用程序。
  2. **代码片段:**您可以编写单个Java表达式、语句或方法,并在JShell中立即执行它们。这对于测试和验证代码的特定部分非常有用。
  3. 自动导入JShell自动导入常见的Java类和包,因此您无需手动导入它们,使代码编写更加简洁。
  4. 脚本化:我们可以将多个命令保存在脚本文件中,并使用JShell执行这些脚本。

JShell 通常用于教学、快速原型设计和测试,以及在 Java 开发中进行快速的探索性编程,但是它不适用于开发大型的Java应用程序。

为什么需要使用 JShell

我们先看我们以前刚刚学习 Java 时写的第一个 hello world 的程序步骤:

  1. 打开 idea,并新建一个 java-study 的工程
  2. 配置该工程的 Java 环境
  3. 新建一个 hello world 的 Java 类
  4. 编译 Java 文件,并修复各种问题
  5. 运行程序

该步骤比较繁琐,而使用 JShell 工具,我们可以一次输入一个程序元素,立即看到执行结果,并根据需要进行调整。

JShell对于初学者非常有用,因为它允许开发者快速编写和测试 Java 代码片段,无需担心完整项目结构和编译过程。这有助于新手更容易地理解 Java 语言的基础概念。同时由于不需要创建完整的应用程序,这可以加速原型设计过程,帮助我们更快地验证概念。

但是 JShell 不能代替 IDE,它只能作为辅助和便捷的工具而已。

使用 JShell

要使用 JShell 必须安装 JDK 9 或更高版本。

启动 JShell

使用 jshell 命令即可启动 JShell,如果启动不了,可能是环境变量配置配置好,可以进入“ bin ”目录,通过该命令启动 JShell

 chenssy@chenssydeMacBook-Pro  ~  jshell
|  欢迎使用 JShell -- 版本 17.0.8
|  要大致了解该版本, 请键入: /help intro

启动 JShell 我们就可以在该窗口测试代码了。

在 JShell 中我们可以直接声明变量创建方法调用方法

声明变量

jshell> int a = 1;
a ==> 1

jshell> int b = 2;
b ==> 2

这里声明了两个变量 a 和 b。

创建方法

jshell> int add(int x,int y) {
   ...>     return x + y;
   ...> }
|  已创建 方法 add(int,int)

新建了一个 add() 方法;

调用方法

我们可以直接利用上面的变量a 、b 来调用 add():

jshell> int c = add(a,b)
c ==> 3

运行表达式

JShell 还可以直接输入 Java 表达式,计算出表达式的结果,然后返回。

jshell> 1 + 2
$6 ==> 3

jshell> 1 > 2 ? "死磕 Java 并发" : "死磕 Java 新特性"
$7 ==> "死磕 Java 新特性"

jshell>

创建 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();

其他的情况大明哥就不一一介绍了,个人感觉这个工具还是显得有点儿鸡肋,比如你新建一个类,语法错了需要重新写,这就很鸡肋了,不过 Mac book 的 iTerm 倒是可以回退整块语句,也算方便了不少。

JShell 的主要命令

JShell 提供了一系列主要命令,用于在交互式环境中执行各种任务和操作。以下表格是一些常用的命令:

命令描述
/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历史记录。
/save (或 /s)JShell历史记录保存到文件中,以便将其用于以后的会话。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值