JShell 入门介绍
北侠点评: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
列出所有声明的类型。