北侠点评:shell这个东西非常重要,shell不是一门语言,而是操作系统范畴,与kernel内核相互对应,所以学好shell至关重要。另外,shell是长久不衰的,即便现在很多情况下被Python所代替,但是shell的生命力依然强悍,还可以延伸出其他很多的东西,眼下的JShell就是一个很好的佐证。

JShell是什么?

查阅介绍JShell的内容,发现了有人写出了这样一段文字:

从Java 9开始,Java开始引入了类似于Python的交互式REPL工具,这就是JShell。

感觉此人的介绍如同驴子拉磨一般,绕圈子,JShell顾名思义,Java中的Shell,还轮不到用Python来做类比的。

JShell是一个简单的,交互式的编程环境。使用JShell,你可以输入代码片段并马上看到运行结果,然后根据需要作出调整。

备注:REPL,全称是:Read-Eval-Print Loop,读取-求值-输出 循环

运行JShell

JShell与Java 9+安装捆绑在一起。例如,在Windows上它的安装路径是:

C:\Program Files\Java\jdk-9.0.1\bin\jshell.exe

可以直接从控制台运行JShell,只需运行jshell命令即可。为了详细的了解jshell的执行过程,我们可以使用详细模式-v,这将有助于我们更好地了解幕后发生的事情。如下所示:

C:\Users\mybatis> jshell -v
| Welcome to JShell -- Version 10.0.1
| For an introduction type: /help intro

jshell>

现在你处于交互模式,JShell会执行你编写的任何内容。另外,要退出JShell只需键入/exit。

表达式

从JShell开始的最简单方法是编写一个简单的表达式。它可以是一个简单的数学表达式:

jshell> 3*(2+1)
$1 ==> 9
|  created scratch variable $1 : int

如你所见,表达式立即被执行,结果打印到控制台。为方便起见,JShell自动创建了一个名为$1的临时变量,以后我们就可以根据此变量名进行使用。然而,表达不限于如上所述的简单数学表达式。你几乎可以用JShell做任何事情。

jshell> Math.sqrt($1)
$2 ==> 3.0

首先,请注意我们能够使用上一个示例中的$1变量。它在每个命令之间保留状态。另一个值得注意的特性是,在大多数情况下,分号是可选的。

变量

表达式通常带有返回值,如果我们未将返回值分配给任何变量时,JShell为我们自动声明变量,通常最好先声明自己的变量。

jshell> int age = 20

一段时间后,你可能会混淆已经声明的变量以及它们的值。此时,可以使用一个特定的命令,键入/vars

方法

如上所述,我们可以不需要在任何类中而是直接在根级别声明变量,也可以对方法执行相同的操作。同样,用户不必担心任何修饰符,例如 public,static或final。只需以返回类型和方法名称开头,并带有可能的参数:

jshell> String sayHello(String name) {
   ...> return "Hello, my name is "+name;
   ...> }
|  created method sayHello(String)

jshell> sayHello("Tom")
$7 ==> "Hello, my name is Tom"
|  created scratch variable $7 : String

在上面的示例中,你可以看到我们声明了一个方法然后调用它。此时,方法亦是对象,蕴含了函数思想。另外,请注意,与顶层不同,内部方法和类分号不可省略。

类型

顶级变量和方法很有用,但通常需要声明和使用常规类、枚举或接口等。请记住,在这种情况下需要分号。否则,JShell将会产生编译错误。

jshell> class Person {
   ...>     private String name;
            [more code here]
   ...> }
|  created class Person

当然,你也可以通过/types列出所有声明的类型。

标签: none

添加新评论