一、简介

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

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

关注我

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

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

java jshell_JDK11 | 第二篇 : JShell 工具相关推荐

  1. Java爬虫入门篇---Jsoup工具

    Java爬虫入门篇---Jsoup工具 前言 准备工作 获取文本数据 获取页面中所有的图片 前言 pythoy的scrapy框架是大名鼎鼎,Jsoup则为Java框架的爬虫 准备工作 1.下载jsou ...

  2. Java虚拟机-第二篇-GC算法与内存分配策略

    2019独角兽企业重金招聘Python工程师标准>>> GC引入 在Java的运行时数据区中,程序计数器.虚拟机栈.本地方法栈三个区域都是线程私有的,随线程而生,随线程而灭,在方法结 ...

  3. 小汤学编程之JAVA番外篇——Properties工具类

    一.编写 通过Java基础的学习,我们了解了Properties这种文本格式,Java程序通过专门的API可以很方便的与之进行交互.但是我们每次对Properties进行写入或读取时都要创建I/O流来 ...

  4. 数据结构(JAVA)第二篇-----链表

    目录 引言 一.单链表 1.定义 2.自定义一个单链表 创建一个MyLinkedList类 addFirst addLast addIndex(int index,int data) obtain r ...

  5. JAVA基础 第二篇:阶乘

    阶乘--理工科领域常用的一种数学符号.关于阶乘,一般定义为:一个正整数的阶乘是不大于这个数的所有正整数的乘积,并且0的阶乘为1. 阶乘的应用范围非常广,比如后面我们要讲到的排列组合.超越数E.梅森数和 ...

  6. 大聪明教你学Java设计模式 | 第二篇:建造者模式

    前言 大聪明在写代码的过程中发现设计模式的影子是无处不在,设计模式也是软件开发人员在软件开发过程中面临的一般问题的解决方案.大聪明本着"独乐乐不如众乐乐"的宗旨与大家分享一下设计模 ...

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

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

  8. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  9. java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...

    本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...

  10. kubernetes之CI/CD工具jenkins第二篇,helm的使用

    1. kubernetes之CI/CD第二篇-jenkins结合helm部署应用: 1. 概述:    在前期的博文中我已经初步介绍过kubernetes环境下的CI/CD的使用.主要是jenkins ...

最新文章

  1. hp laser103 属性没有配置项_冰雪传奇:起源之上还有装备吗?详解鸿蒙装备合成与属性...
  2. 【Android AAR】1 分钟不用改任何代码在 Eclipse 中使用 AAR
  3. FileItem API详解及演示
  4. 在应用程序中实现对NandFlash的操作
  5. springcloud官方文档_通俗易懂!Spring Cloud简介:官方文档翻译版
  6. MongoDB 初学
  7. Nginx配合uGIGI和Django用作应用程序网关
  8. Alfred 4 for Mac(应用快速启动器)
  9. MySQL报错113_连接 MySQL 报错'NoneType' object has no attribute '__getitem__'
  10. 修改Tomcat8的默认访问端口8080
  11. Python自动化体系学习思维导图、知识点整理
  12. 用c语言简单的指针求进制,求助!C语言用指针函数实现十进制转,十六进制,八进制,二进制...
  13. OpenGL EGL简介
  14. Android设置iptable实现外网访问
  15. (附源码)spring boot校园购物网站 毕业设计041037
  16. javascript原型图了解
  17. 大学计算机英语怎么说,大学计算机是什么意思
  18. 【智能优化算法-黑猩猩算法】基于增强型黑猩猩优化器算法求解单目标优化问题附matlab代码
  19. java ssi_快速部署SSI框架
  20. [论文阅读] (09)SP2019 HOLMES Real-time APT Detection through Correlation of Suspicious Information Flow

热门文章

  1. Java 8的新特性(入门)
  2. 微信发红包-测试用例(全)
  3. K3Cloud BOS设计 值更新 字段拼接到文本字段
  4. 用Python实现GB与BIG5码的转换
  5. 常用编码说明-GBKBIG5GB18030
  6. Python爬取《你是我的荣耀》——词云图
  7. html5使用mescroll
  8. 天猫旺铺装修的一些特殊代码 【持续收集中...】
  9. 32位计算机怎么安装ps,我可以在64位系统上安装32位Photoshop吗?
  10. 基于AT89C51的多层电梯控制系统