适用浏览器:IE8、360、FireFox、Chrome、Safari、Opera、傲游、搜狗、世界之窗.

Java新特性之JShell

为什么我们要了解JShell

我们学习Java语言的第一个程序通常为打印一行Hello World。代码通常如下

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

然后我们使用javac命令来编译java文件

javac HelloWorld.java

编译完成后我们需要使用java命令来执行编译好的字节码文件,把程序结果打印出来

java HelloWorld

最后我们可以看到运行结果

Hello, world!

到此我们完成了Java的第一个程序,看着还不错,不过我们对比一下使用bash打印Hello World的例子

$ echo Hello, world!

回车之后我们就可以看到运行结果

Hello, world!

显然,使用 bash 编写的“Hello, world!”要简单得多。你只需要在命令行输入代码,bash 就会自动检查语法,立即打印出结果;它不需要我们调用额外的编辑器、编译器以及解释器。当然,这并不是说 bash 不需要编译和运行过程。bash 只是把这些过程处理得自动化了,不再需要我们手动处理了。

Java学习的这种“门槛”极大的影响了学习Java的热情,那么Java有没有一种方式可以达到bash的这种效果了。

答案是肯定的,JShell,也就是 Java 的交互式编程环境,是 Java 语言给出的其中一个答案。

JShell使用

启动JShell

$ jshell
|  Welcome to JShell -- Version 17
|  For an introduction type: /help intro

jshell>

JShell 的交互式编程环境,还有一个详细模式,能够提供更多的反馈结果。启用这个详尽模式的办法,就是使用“-v”这个命令行参数。我们使用 JShell 工具的主要目的之一,就是运行测试我们编写的代码片段

$ jshell -v
|  Welcome to JShell -- Version 17
|  For an introduction type: /help intro

退出 JShell

jshell> /exit
|  Goodbye

帮助命令

jshell> /help
|  Type a Java language expression, statement, or declaration.
|  Or type one of the following commands:
|  /list [<name or id>|-all|-start]
|    list the source you have typed
... snipped ...
|  /help [<command>|<subject>]
|    get information about using the jshell tool
... snipped ...

输入该命令可以查看JShell支持的命令,熟悉 JShell 支持的命令,能给我们带来很大的便利

执行Java语句

jshell> System.out.print("Hello, world!");
Hello, world!
jshell>

可以看到,一旦输入完成,JShell 立即就能返回执行的结果,而不再需要编辑器、编译器、解释器。

如果我们使用了错误的方法,或者不合法的语法,JShell 也能立即给出提示。

jshell> System.out.println("Hello, world\!");
|  Error:
|  illegal escape character
|  System.out.println("Hello, world\!");
|                                   ^

JShell 的这种立即执行、及时反馈的特点,毫无疑问地,加快了我们学习和测试简单 Java 代码的速度,激励着我们去学习更多的东西,更深入的技能。

可覆盖的变量声明

jshell> String greeting;
greeting ==> null
|  created variable greeting : String

jshell> String greeting = "Hola";
greeting ==> "Hola"
|  modified variable greeting : String
|    update overwrote variable greeting : String

jshell> Integer greeting;
greeting ==> null
|  replaced variable greeting : Integer
|    update overwrote variable greeting : String

变量的声明可以重复,也可以转换类型,就像上一个声明并不存在一样。这样的特点和 Java 的可编译代码有所不同,在可编译的代码里,在一个变量的作用域内,这个变量的类型是不允许转变的,也不允许重复声明。

独立的表达式

我们知道,在 Java 程序里,语句是最小的可执行单位,表达式并不能单独存在。但是,JShell 却支持表达式的输入。比如说,输入“1+1”,JShell 会直接给出正确的结果。

jshell> 1 + 1
$1 ==> 2
|  created scratch variable $1 : int

特别说明

JShell 的设计并不是为了取代 IDE。JShell 在处理简单的小逻辑,验证简单的小问题时,比 IDE 更有效率。如果我们能够在有限的几行代码中,把要验证的问题表达清楚,JShell 就能够快速地给出计算的结果。这一点,能够极大地提高我们的工作效率和学习热情。

posted @ 2022-02-21 15:20  ycwiacb  阅读(281)  评论(0)    收藏  举报