JShell
Java9 引入了JShell, JShell是一种交互式的Java REPL(Read-Evaluate-Print-Loop)环境。JShell的引入让Java也能被即写即用,给人一种解释执行的感觉。
启动
jshell
从jshell里退出
jshell> /exit
代码片段
jshell里面输入的表达式,变量,类声明等语句统称为片段。
jshell> int x = 100 //;是可选的
x ==> 100
jshell> int x = 100;
x ==> 100
jshell> void hello(){
...> print("你好!");
...> }
jshell> hello()
你好!
表达式自动声明变量
如果输入的表达式没有引入变量,一个自动命名的变量被创建,可通过这个变量应用表达式的结果
jshell> 1 + 1
$1 ==> 2
jshell> $1
$1 ==> 2
jshell> int getOne(){
...> return 1;
...> }
jshell> getOne()
$4 ==> 1
定义覆盖
先前的定义(包括变量,方法,类)会被后面输入的同名定义覆盖。
jshell> int x = 1
x ==> 1
jshell> String x = "str"
x ==> "str"
jshell> String getOne(){
...> return "一";
...> }
jshell> getOne()
$9 ==> "一"
允许提前引用
jshell允许提前引用尚未定义的名称,只要在实际执行该段片段时,被应用的名称可用即可。
jshell> void showHello(){
...> print(hello);
...> }
jshell> showHello() //此时无法正常调用
jshell> var hello = "你好"
hello ==> "你好"
jshell> showHello() //正常调用
你好
jshell允许输入的内容
jshell里面可以输入代码片段和命令,代码片段用于表达逻辑,命令用于控制jshell,调用jshell提供的功能。
任何传统开发中合法的Java代码片段均可在jshell里正确执行,所以Java11开始
var x = 1;
也可以在对应版本的jshell里面使用。
命令以/
开头,一个常用的命令/list
用于以格式ID : 代码片段
展示以前输入的代码片段,ID可以用于在其他命令或输出中标识该代码片段。
jshell> /list
1 : 1 + 1
2 : $1
4 : getOne()
6 : String x = "str";
7 : x
8 : String getOne(){
return "一";
}
9 : getOne()
10 : void showHello(){
print(hello);
}
11 : showHello()
12 : var hello = "你好";
13 : showHello()
异常处理
jshell不会像传统程序一样因为用户的代码抛出异常而退出,而是直接给以反馈。
jshell> throw new Exception()
| 异常错误 java.lang.Exception
| at (#16:1)
以#ID:行号
的格式标识出异常出现的位置。