Jshell工具
JShell是JDK9的新特性之一,以 Kulla 实现的 Java Enhancement Proposal (JEP) 222 规范的一部分。很多编程语言如 JavaScript、Python、Ruby 等,提供了非常易用的命令行执行工具,但 Java 一直缺失此功能。因此 JDK 9 引入了 Java shell 工具 —— JShell。
传统方式创建Java程序需要的步骤:
打开编辑器并编写程序、 保存程序 、编译程序 、运行程序
前面的步骤是在我们的程序没有任何错误的情况下,如果程序出现错误,我们就需要一直重复上面的步骤,这是一件非常麻烦的事情
在这里我们的Jshell的优势就体现出来了,Jshell可以执行 Java脚本代码,并且立即返回结果。
1.启动Jshell
要启动Jshell,电脑必须配备JDK9的环境,没有的请自行百度搜索教程。
环境配备好之后,直接
启动cmd
cmd打开之后,输入Jshell的启动命令即可使用:
JShell
2.程序演示Jshell
简单编写一个x+y的程序并输出一下结果:
从上面的案例,我们可以看到,JShell可以立即执行java脚本代码,但它并不局限于只执行一条命令,起码从上面的图片来看,图中程序的变量是一直有效的,那么上图中的这些变量什么情况下才会失效呢?
这就牵扯到另外一个命令,JShell的退出命令:
/exit
上面的小示例仅仅表现了Jshell的保存变量的功能,下面就分类介绍Jshell的其他功能
3.变量、方法的改写
在传统的程序中,一个变量只可以赋一种类型的值,如果转变类型复制的话,程序会报错,Jshell跨类型赋值后则会直接覆盖掉原来的值
JShell方法的改写:
//创建方法
jshell> String weather(String s){
...> return s;
...> }
| 已创建 方法 weather(String)
//改写方法
jshell> String weather(String s) {
...> return "it is really " + s;
...> }
| 已修改 方法 weather(String)
| 更新已覆盖 方法 weather(String)
jshell> weather("wonderful")
$8 ==> "it is really wonderful"
| 已创建暂存变量 $8 : String
4.Jshell关于导包
一般写程序的时候,整个程序的运行导入一些有用的包,前面写的程序并没有导入任何的包,为什么还能照常运行?这就归功于Jshell的新特性–默认导包
Jshell会默认导入10个常用包
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.*
5.JShell其他功能
命令大全
jshell> /help
| 键入 Java 语言表达式, 语句或声明。
| 或者键入以下命令之一:
| /list [<名称或 id>|-all|-start]
| 列出您键入的源
| /edit <名称或 id>
| 编辑源条目
| /drop <名称或 id>
| 删除源条目
| /save [-all|-history|-start] <文件>
| 将片段源保存到文件
| /open <file>
| 打开文件作为源输入
| /vars [<名称或 id>|-all|-start]
| 列出已声明变量及其值
| /methods [<名称或 id>|-all|-start]
| 列出已声明方法及其签名
| /types [<名称或 id>|-all|-start]
| 列出类型声明
| /imports
| 列出导入的项
| /exit [<integer-expression-snippet>]
| 退出 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 [<command>|<subject>]
| 获取有关使用 jshell 工具的信息
| /set editor|start|feedback|mode|prompt|truncation|format ...
| 设置配置信息
| /? [<command>|<subject>]
| 获取有关使用 jshell 工具的信息
| /!
| 重新运行上一个片段 -- 请参阅 /help rerun
| /<id>
| 按 ID 或 ID 范围重新运行片段 -- 参见 /help rerun
| /-<n>
| 重新运行以前的第 n 个片段 -- 请参阅 /help rerun
|
| 有关详细信息, 请键入 '/help', 后跟
| 命令或主题的名称。
| 例如 '/help /list' 或 '/help intro'。主题:
|
| intro
| jshell 工具的简介
| id
| 片段 ID 以及如何使用它们的说明
| shortcuts
| 片段和命令输入提示, 信息访问以及
| 自动代码生成的按键说明
| context
| /env /reload 和 /reset 的评估上下文选项的说明
| rerun
| 重新评估以前输入片段的方法的说明