zoukankan      html  css  js  c++  java
  • Java 9 尝鲜之JShell交互式编程环境

    Java 9

    JShell——Java 9 的交互式编程环境

    本文要求读者有基本的 Java 知识。

    Tips
    Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容。也就是说,用 Java 9 写的代码,有可能在 Java 8 或更早版本的 JDK 上不能运行。

    1. 在操作系统上安装开发所需要的软件

    首先,你需要下载JDK 9 (Java Development Kit 9) ,需要到此网站来下载JDK 9。首先需要先同意许可协议,然后就可以下载了。
    Java 9 可以运行在很多平台上:

    • Windows 32-bit
    • Windows 64-bit
    • macOS 64-bit (以前称之为 Mac OS X 或 OS X)
    • Linux 32-bit
    • Linux 64-bit
    • Linux on ARM 32-bit
    • Linux on ARM 64-bit

    下一步需要配置环境变量。跟之前的 JDK 配置方法相同。这里,我以 macOS 10.12 版本为例,在 Macbook 上的配置。这里会需要 vi 的一些基本操作,可以去网上查找如何使用。

    1. 下载完 JDK 后,直接运行。然后安装目录在:
      /library/Java/JavaVirtualMachines/jdk-9.jdk/
    2. 在 Terminal 下,进入到你的用户的当前目录下(一打开就是你的用户默认目录,实在不清楚在命令行敲入cd则会切换到默认目录下)。
    3. 在命令行中执行 ls -a命令,列出当前目录下的包括隐藏的文件或目录。

    ls -a

    4.找到 .bash_profile文件,此文件会影响你当前用户的配置信息,并执行vi .bash_profile 命令编辑此文件。
    vi .bash_profile

    5.进入编辑页面后,配置 Java Home 和 Path 环境变量:
    配置 Java 环境变量

    6.配置完以后,使用esc键退出编辑状态,输入“:wq”,保存并退出。并执行
    . .bash_profile,使配置文件立刻生效。
    7. 在命令行下执行javac -version,如果输出如下信息,则说明 JDK 配置正确。

    javac 9-ea

    至此,JDK 配置完成。
    启动JShell。
    在Terminal下输jshell -v,

    jshell

    此时,就进入JShell 开发环境,命令行里是以jshell>开头。
    如果想退出JShell 环境,则输入/exit命令。

    退出 jshell

    2. 理解在交互式编程环境下开发的好处

    Java 9 中引入了交互式编程环境(REPL),这就是JShell,它允许可以执行 Java脚本代码,并且立即返回结果。因此,我们不需要创建什么一个解决方案或工程,就能很容易地编写代码并能很快的看到运行结果。我们不必等待整个项目 build 完去检查多行代码的执行结果。JShell,就像其他 REPL 一样,有利于探索式编程,我们很容易地进行交互式尝试和调试不同的算法和结构。

    3. 第一个 JShell 下的 Java 代码

    我们简单写一个 JShell 下的一个 Java 代码,就是一个打印输入。

     System.out.println("Hello, Java 9, now I am in JShell!")
    

    输出结果为:

    第一个 JShell 下的 Java 代码

    Tips
    在 JShell 环境下,语句末尾的“;” 是可选的。但推荐还是最好加上。提高代码可读性。

    在一些例子中,我们将利用JShell 这一特性,提供对网络的访问。此功能与Web Service交互时非常有用。然而,你必须确保你的防火墙配置不会阻挡 JShell。

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

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

    /imports
    

    下面就会列出已经导入的包:

    imports

    当我们在 JShell 之外写 Java 代码时,如所需要的 java.lang 包是默认导入的。在 JShell 下使用/imports命令并没没有列出这些包,以下是所有的在 JShell 环境下默认导入的包:

    • java.lang
    • java.io
    • java.math
    • java.net
    • java.nio.file
    • java.util
    • java.util.concurrent
    • java.util.function
    • java.util.prefs
    • java.util.regex
    • java.util.stream

    此外,JShell 提供了自动补全的功能,只需按下 Tab 键,就能自动补全。
    但有些情况下,根据我们输入的语句会对应很多选项,这时候 JShell 就会全部给你列出来。
    例如,当我输入 S 时,就会列出来所以以 S 开头的类。

    自动补全

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

    list method
    最后完整输入:

    System.out.println("Auto-complete is helpful in JShell");
    

    5. 在JShell中编写 Java 9 代码

    首先,在命令行下可以执行jshell -v来进入命令行的开发环境
    下面我们定义calculateRectangleArea方法来计算一个正方形的面积。

    float calculateRectangleArea(float width, float height) {
        return width * height;
    }
    

    calculateRectangleArea

    然后输入回车,则会输入如下信息:

    created calculateRectangleArea

    Tips
    所有从 JShell 输出的消息用“|”表示。

    输入/list 在 JShell 中,会列出到目前为止当前 session 里所有有效的代码片段。

    /list

    接下来我们定义一个 float类型的变量width并赋值为50:

    float width = 50;
    

    输入完上面的代码后,JShell 就会给我们如下信息:

    width

    然后定义height变量:

    float height = 25;
    

    接着输入float area = ca 然后自动补全为float area = calculateRectangleArea(,再输入刚才定义的变量widthheight,则方法则计算出面积并返回1250.0。

    Area

    下面我们再使用/list列出到目前为之所有有效的代码片段。

    list again

    输入以下代码:

    System.out.printf("Width: %.2f, Height: %.2f, Area: %.2f
    ", width, height, area);
    

    则会输入如下信息:

    width, height, area

    6. 计算表达式

    Java 9 中运行我们评估任何有效的表达式,在 JShell中输入如下表达式:

    width * height;
    

    当我们输入上面的表达式,它就会给分配给一个临时的变量,这个变量以“$”开头,并跟着一个数字。这个变量是$6,但也有可能是$7, $8。

    $6

    在当前 session 中,我们可以在接下来的代码中直接使用此临时变量,例如:

    System.out.printf("The calculated area is %.2f
    ", $6);
    

    $8

    我们还可以使用之前的临时变量进行响应的运算,例如,

    $6 + 10.5f;
    

    $9

    7. 使用变量、方法和源代码

    到目前为止,我们创建了很多变量,我们可以使用/vars来查看当前 session 下所有创建过的变量:

    /vars

    我们再定义一个方法:

    float calculateRectanglePerimeter(float width, float height) {
        return 2 * (width + height);
    }
    

    然后使用/methods 来查看所有的方法。

    /methods

    你也可以 修改已经存在的方法,例如,calculateRectanglePerimeter的方法改为如下:

    float calculateRectanglePerimeter(float width, float height) {
        float perimeter = 2 * (width + height);
        System.out.printf("Width: %.2f
    ", width);
        System.out.printf("Height: %.2f
    ", height);
        System.out.printf("Perimeter: %.2f
    ", perimeter);
        return perimeter;
    }
    

    然后输出以下信息:

    change method

    我们还可以使用 /list method name来查看具体某一个方法的具体信息:

    /list method name

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

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

    /edit calculateRectangleArea
    

    接下来就会显示编辑器对话框,和将要修改的方法:

    JShell Edit Pad

    代码修改完成以后,先点击“Accept”按钮,再点击“Exit”按钮,则退出编辑器,在 JShell 命令行中提示方法已经修改。
    JShell Edit Pad 编辑器功能非常有限,仅能提供一些最基础的功能,不过好消息是,JShell 可以配置外部的代码编辑器,我们只需要使用/edit 外部编辑器的完整路径的方式,来指定外部的代码编辑器。
    例如,我想使用Sublimet Text 作为外部的代码编译器,则需要使用如下命令:

    /set editor "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
    

    设置成功以后,返回如下信息:

    set editor

    然后我们再执行/edit calculateRectangleArea命令,则就打开 Sublime Text,

    Sublime Text

    9. 从外部加载源代码

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

    void printHello() {
    System.out.println("Hello, World!");
    }
    
    printHello()
    

    在 JShell 环境中执行以下语句:

    /open /Users/i324779/Desktop/Begin.java
    

    加载文件并执行:

    load source code

  • 相关阅读:
    Docker容器启动时初始化Mysql数据库
    使用Buildpacks高效构建Docker镜像
    Mybatis 强大的结果集映射器resultMap
    Java 集合排序策略接口 Comparator
    Spring MVC 函数式编程进阶
    换一种方式编写 Spring MVC 接口
    【asp.net core 系列】6 实战之 一个项目的完整结构
    【asp.net core 系列】5 布局页和静态资源
    【asp.net core 系列】4. 更高更强的路由
    【Java Spring Cloud 实战之路】- 使用Nacos和网关中心的创建
  • 原文地址:https://www.cnblogs.com/IcanFixIt/p/6690478.html
Copyright © 2011-2022 走看看