一、产生背景
像 Pyton 、Scala 之类的语言很早就有了交互式编程环境REPL(Read evaluate print loop) ,以交互式的方式对语句和表达式求值,开发者只需要输入一些代码,就可以的编译前获取对程序的反馈。而之前的java版本,想要执行代码,必须先创建文件、声明类、提供测试方法才能实现。
二、设计理念
即写即得,快速运行
三、使用jshell
${JAVA_HOME}/bin 目录下有个 jshell.exe的运行程序,也可以在终端直接运行 jshell 进入java的shell 模式:
1 2 3 4 5 6 7 8
| jshell> int i = 10 i ==> 10
jshell> int j = 20 j ==> 20
jshell> System.out.println(i + j); 30
|
1 2 3 4 5 6 7
| jshell> public void add(int i ,int j){ ...> System.out.println(i+j); ...> } | 已创建 方法 add(int,int)
jshell> add(1,20) 21
|
注意:如果再次声明相同的方法,会覆盖前面的方法.
- 查看默认导入的包
如果使用以下这些包中的类,可以不使用 import 导入。
1 2 3 4 5 6 7 8 9 10 11 12 13
| jshell> /import | import java.io.* | import java.math.* | import java.net.* | import java.nio.file.* | import java.util.* | import java.util.concurrent.* | import java.util.function.* | import java.util.prefs.* | import java.util.regex.* | import java.util.stream.*
jshell>
|
1 2 3 4 5
| jshell> /vars | int i = 10 | int j = 20
jshell>
|
1 2 3 4
| jshell> /methods | void add(int,int)
jshell>
|
假设 /Users/huangkai/HelloTest.java
文件内容为:
1 2 3 4
| void printHello(){ System.out.println("Hello world!"); } printHello();
|
使用 jshell 执行:
1 2 3 4
| jshell> /open /Users/huangkai/HelloTest.java Hello world!
jshell>
|
1 2
| jshell> URL url = new URL("https://www.baidu.com"); url ===> https:
|
以上这句话,会抛出MalformedURLException,但在 jshell环境不需要throws 或 try catch,内部隐藏实现了。