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 就能够快速地给出计算的结果。这一点,能够极大地提高我们的工作效率和学习热情。

浙公网安备 33010602011771号