您当前的位置: 首页 > 

liaowenxiong

暂无认证

  • 3浏览

    0关注

    1171博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JShell 详解

liaowenxiong 发布时间:2021-08-11 10:52:50 ,浏览量:3

文章目录
  • 一、简介
  • 二、为什么使用 JShell
  • 三、参考示例
    • 启动 JShell
    • 退出 JShell
    • 声明定义基本类型的变量
    • 声明定义一个方法
    • 覆盖已存在的变量、方法、类的定义
    • 查看 JShell 默认导入的包
    • 自动补全功能
    • 列出所有键入的源
    • 列出已声明方法及其签名
    • 加载外部的源代码
    • 查看 JShell 提供的所有指令
    • 将你输入的历史代码片段保存到文件中

一、简介

JShell(Java Shell)工具是 JDK1.9 出现的工具, JShell 是一个用于学习 Java 编程语言和 Java 代码原型的交互式工具。JShell 是交互式 REPL(Read-Evaluate-Print Loop,读取-求值-输出 循环)工具。它在输入时评估声明,语句和表达式,并立即显示结果。

可以在命令终端输入下面的命令查看 JShell 简介:

jshell> /help intro
|  
|  intro
|  
|  使用 jshell 工具可以执行 Java 代码, 从而立即获取结果。
|  您可以输入 Java 定义 (变量, 方法, 类, 等等), 例如:  int x = 8
|  或 Java 表达式, 例如:  x + x
|  或 Java 语句或导入。
|  这些小块的 Java 代码称为 '片段'。
|  
|  这些 jshell 命令还可以让您了解和
|  控制您正在执行的操作, 例如:  /list
|  
|  有关命令的列表, 请执行: /help

简而言之,使用 JShell,你可以输入代码片段并马上看到运行结果,然后就可以根据需要作出调整。

二、为什么使用 JShell

使用JShell,您可以一次输入一个程序元素,立即查看结果,并根据需要进行调整。

Java程序开发通常涉及以下过程:

编写程序代码 编译程序 修复编译错误 编译程序 运行程序 重复以上过程…

JShell 可帮助您在开发程序时尝试代码并轻松探索选项。您可以测试单个语句,尝试不同的方法变体,并在 JShell 会话中试验不熟悉的API。JShell 不替换 IDE。在开发程序时,将代码粘贴到 JShell 中进行试用,然后将 JShell 中的工作代码粘贴到程序编辑器或 IDE 中。

三、参考示例 启动 JShell
liaowenxiongdeMacBook-Air:~ liaowenxiong$ jshell
|  欢迎使用 JShell -- 版本 9.0.4
|  要大致了解该版本, 请键入: /help intro

jshell> 
退出 JShell
jshell> /exit
|  再见
声明定义基本类型的变量
jshell> int x = 45
x ==> 45
|  已创建 变量 x : int
声明定义一个方法
jshell> String twice(String s) {
   ...>   return s + s;
   ...> }
|  已创建 方法 twice(String)

jshell> twice("Oecan")
$4 ==> "OecanOecan"
|  已创建暂存变量 $4 : String

注:直接调方法执行,没有指定变量接收,JShell 会自动创建一个临时变量接收返回值。

覆盖已存在的变量、方法、类的定义

在试验代码时,您可能会发现变量,方法或类的定义没有按照您希望的方式执行。通过输入新的定义可以轻松更改定义,该定义将覆盖先前的定义。

例如,重新定义 twice() 方法:

jshell> String twice(String s) {
   ...>   return "Twice: " + s;
   ...> }
|  已修改 方法 twice(String)
|    更新已覆盖 方法 twice(String)

jshell> twice("thing")
$6 ==> "Twice: thing"
|  已创建暂存变量 $6 : String

例如,重新定义变量:

jshell> int x = 45
x ==> 45
|  已创建 变量 x : int

jshell> String x
x ==> null
|  已替换 变量 x : String
|    更新已覆盖 变量 x : int
查看 JShell 默认导入的包
jshell> /imports 
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*
自动补全功能

当我们想输入 System 类时,只需要输入 Sys 然后按下 Tab 键,则自动补全, 然后再输入“.o”,则会自动补全方法,在补全“System.out.”后再按下 Tab 键,就会列出当前类的所有的 public 方法:

jshell> System
签名:
java.lang.System



jshell> System.out.
append(        checkError()   close()        equals(        flush()        format(        getClass()     
hashCode()     notify()       notifyAll()    print(         printf(        println(       toString()     
wait(          write(    
列出所有键入的源

列出到目前为止当前 session 里所有有效的代码片段:

jshell> /list 

   2 : 2+2
   4 : twice("Oecan")
   5 : String twice(String s) {
         return "Twice: " + s;
       }
   6 : twice("thing")
   8 : String x;
列出已声明方法及其签名
jshell> /methods 
|    String twice(String)
加载外部的源代码

如果在外部已经有写好的 Java 文件,可以使用 /open 命令导入到 JShell 环境中,例如现在有一个Test.java 文件:

void say(String name) {
     System.out.println("hello " + name);
}

导入 JShell 进程中:

jshell> /open /Users/Documents/java11/Test.java
jshell> /methods # 查看已经声明定义的方法
|    String twice(String)
|    void say(String)

jshell> say("zhangsan")
hello zhangsan
查看 JShell 提供的所有指令
jshell> /help
|  键入 Java 语言表达式, 语句或声明。
|  或者键入以下命令之一:
|  /list [|-all|-start]
|       列出您键入的源
|  /edit 
|       编辑源条目
|  /drop 
|       删除源条目
|  /save [-all|-history|-start] 
|       将片段源保存到文件
|  /open 
|       打开文件作为源输入
|  /vars [|-all|-start]
|       列出已声明变量及其值
|  /methods [|-all|-start]
|       列出已声明方法及其签名
|  /types [|-all|-start]
|       列出类型声明
|  /imports
|       列出导入的项
|  /exit []
|       退出 jshell 工具
|  /env [-class-path ] [-module-path ] [-add-modules ] ...
|       查看或更改评估上下文
|  /reset [-class-path ] [-module-path ] [-add-modules ]...
|       重置 jshell 工具
|  /reload [-restore] [-quiet] [-class-path ] [-module-path ]...
|       重置和重放相关历史记录 -- 当前历史记录或上一个历史记录 (-restore)
|  /history
|       您键入的内容的历史记录
|  /help [|]
|       获取有关使用 jshell 工具的信息
|  /set editor|start|feedback|mode|prompt|truncation|format ...
|       设置配置信息
|  /? [|]
|       获取有关使用 jshell 工具的信息
|  /!
|       重新运行上一个片段 -- 请参阅 /help rerun
|  /
|       按 ID 或 ID 范围重新运行片段 -- 参见 /help rerun
|  /-
|       重新运行以前的第 n 个片段 -- 请参阅 /help rerun
|
|  有关详细信息, 请键入 '/help', 后跟
|  命令或主题的名称。
|  例如 '/help /list' 或 '/help intro'。主题:
|
|  intro
|       jshell 工具的简介
|  id
|       片段 ID 以及如何使用它们的说明
|  shortcuts
|       片段和命令输入提示, 信息访问以及
|       自动代码生成的按键说明
|  context
|       /env /reload 和 /reset 的评估上下文选项的说明
|  rerun
|       重新评估以前输入片段的方法的说明
将你输入的历史代码片段保存到文件中

保存指令 /save 的语法格式:/save [-all|-history|-start]

jshell> /save -history /users/liaowenxiong/desktop/jshell.txt
关注
打赏
1661566967
查看更多评论
立即登录/注册

微信扫码登录

0.0443s