文章首发于公众号《程序员果果》

地址 : https://mp.weixin.qq.com/s/saHBSTo4OjsIIqv_ixigjg

一、简介

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

二、为什么要使用JShell ?

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

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

  • 写一个完整的程序。
  • 编译它并修复任何错误。
  • 运行程序。
  • 弄清楚它有什么问题。
  • 编辑它。
  • 重复这个过程。

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

三、JShell的使用

1. 启动和退出

使用JShell需要配置好java的环境变量。

启动:

jshell

要以详细模式启动JShell,请使用以下-v选项:

jshell -v

退出:

/exit

2. 运行代码片段

使用详细选项启动JShell以获得最大可用反馈量:

jshell -v
| 欢迎使用 JShell -- 版本 11.0.2
| 要大致了解该版本, 请键入: /help intro

在提示符处输入以下示例语句,并查看显示的输出:

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

首先,显示结果。将其读作:变量x的值为45.因为您处于详细模式,所以还会显示所发生情况的描述。

注意:如果未输入分号,则会自动将终止分号添加到完整代码段的末尾。

当输入的表达式没有命名变量时,会创建一个临时变量,以便稍后可以引用该值。以下示例显示表达式和方法结果的临时值。该示例还显示了...> 在代码段需要多行输入完成时使用的continuation prompt():

jshell> String twice(String s) {
...> return s + s;
...> }
| 已创建 方法 twice(String) jshell> twice("Oecan")
$4 ==> "OecanOecan"
| 已创建暂存变量 $4 : String

3. 改变定义

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

要更改变量,方法或类的定义,只需输入新定义即可。例如,twice在定义该方法尝试片段得到在下面的示例中的新定义:

jshell> String twice(String s) {
...> return "Twice: " + s;
...> }
| 已修改 方法 twice(String)
| 更新已覆盖 方法 twice(String) jshell> twice("thing")
$6 ==> "Twice: thing"
| 已创建暂存变量 $6 : String

还可以改变变量的类型定义。以下示例显示x从String更改int为:

jshell> int x = 45
x ==> 45
| 已创建 变量 x : int jshell> String x
x ==> null
| 已替换 变量 x : String
| 更新已覆盖 变量 x : int

4. 查看默认导入和使用自动补全功能

默认情况下,JShell提供了一些常用包的导入,我们可以使用 import 语句导入必要的包或是从指定的路径的包,来运行我们的代码片段。我们可以输入以下命令列出所有导入的包:

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. 自动补全的功能

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

jshell> System
签名:
java.lang.System <再次按 Tab 可查看文档> jshell> System.out.
append( checkError() close() equals( flush() format( getClass()
hashCode() notify() notifyAll() print( printf( println( toString()
wait( write(

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

jshell> /list 

   2 : 2+2
4 : twice("Oecan")
5 : String twice(String s) {
return "Twice: " + s;
}
6 : twice("thing")
8 : String x;

7. 列出到目前为止当前 session 里所有方法

jshell> /methods
| String twice(String)

8. 使用外部代码编辑器来编写 Java 代码

现在,我想对twice方法做一些改动,如果这时有外部代码编辑器的话,做起来会很容易。在 JShell 中可以启用JShell Edit Pad 编辑器,需要输入如下命令,来修改上面的方法:

代码修改完成以后,先点击“Accept”按钮,再点击“Exit”按钮,则退出编辑器,在 JShell 命令行中提示方法已经修改。

9. 从外部加载源代码

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

void say(String name) {
System.out.println("hello " + name);
}
jshell> /open /Users/Documents/java11/Test.java

jshell> /methods
| String twice(String)
| void say(String) jshell> say("zhangsan")
hello zhangsan

JShell工具的更多使用方法,请参照官方示例:https://docs.oracle.com/javase/9/jshell/

关注我




欢迎扫码或微信搜索公众号《程序员果果》关注我,更多精彩内容不能错过 ~~

(转载本站文章请注明作者和出处 程序员果果的博客

JDK11 | 第二篇 : JShell 工具的更多相关文章

  1. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  2. Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...

  3. 前端工程师技能之photoshop巧用系列第二篇——测量篇

    × 目录 [1]测量信息 [2]实战 [3]注意事项 前面的话 前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇——测量篇 测量信息 在网页制作中需要 ...

  4. 【OpenGL】第二篇 Hello OpenGL

    ---------------------------------------------------------------------------------------------------- ...

  5. 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发

    第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...

  6. 第二篇 SQL Server安全验证

    本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...

  7. PHP 性能分析第二篇: Xhgui In-Depth

    [前言]这是国外知名博主 Davey Shafik 撰写的 PHP 应用性能分析系列的第二篇,第一篇介绍 Xhprof/Xhgui,第三篇则关注于性能调优实践. 在第一篇中,我们初步介绍了 xhpro ...

  8. C#语法糖之第二篇: 参数默认值和命名参数 对象初始化器与集合初始化器

    今天继续写上一篇文章C#4.0语法糖之第二篇,在开始今天的文章之前感谢各位园友的支持,通过昨天写的文章,今天有很多园友们也提出了文章中的一些不足,再次感谢这些关心我的园友,在以后些文章的过程中不断的完 ...

  9. shell第二篇

    第二篇知道shell是什么,再来了解一下shell的分类及相关历史 参考百度百科:shell 1.shell概念(计算机壳层) 在计算机科学中,Shell俗称壳(用来区别于核),是指"提供使 ...

随机推荐

  1. Cron表达式 详解

    Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: (1) 7个域: Seconds Minutes Hours DayofMon ...

  2. 【学习笔记】Minkowski和

    这还是个被我咕了N久的玩意 Minkowski和是一个奇怪的玩意 他长这样 $S={a+b \| a \in A , b \in B}$ AB可以是点集也可是向量集(显然) 他可以处理一些奇怪的东西 ...

  3. sys模块-与python解释器交互的模块

    需要  import sys a=sys.platform   #获取当前系统平台 #如果是window系统就返回‘win32’#如果是linux系统就返回‘linux’#如果是Windows/Cyg ...

  4. k-means原理和python代码实现

    k-means:是无监督的分类算法 k代表要分的类数,即要将数据聚为k类; means是均值,代表着聚类中心的迭代策略. k-means算法思想: (1)随机选取k个聚类中心(一般在样本集中选取,也可 ...

  5. react native 之 redux 使用套路

    redux是什么?他是一个state容器 redux的运作方式是怎样的? 接入方式: 1. npm install 下列内容: npm install --save redux npm install ...

  6. C#与java的区别(继承,接口实现,指针,编译后形式,异常处理几个方面比较区别)

  7. 51Nod 1277 字符串中的最大值 ( KMP && DP )

    题意 : 一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd.给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值.例如:S ...

  8. [洛谷2257]ZAP-Queries 题解

    前言 这道题还是比较简单的 解法 首先将题目转化为数学语言. 题目要我们求的是: \[\sum_{i=1}^a\sum_{j=1}^b[gcd(i,j)=d]\] 按照套路1,我们将其同时除以d转换为 ...

  9. Kohana Minion cli 学习

    1.E:\html\tproject\framebota\platform\bootstrap.php Kohana::modules(array( 'auth' => MODPATH.'aut ...

  10. height设置百分比的条件

    很多时候我们在给height设置百分比的时候不起作用, 这时候就要来谈谈什么情况下才起作用了 1)所有父级元素必须有高度: 2)必须是块级元素,行内元素不起作用: 3)ie9 以下 使用 positi ...