如何在Java 9中调试JShell?

介绍

Java 9中引入了JShell,这是一个REPL(读取-评估-输出循环)工具,它使Java开发人员可以更快地测试和探索Java代码。JShell简化了Java体验,即时反馈,无需编译和运行整个程序即可执行Java代码。在本文中,我们将讨论如何在Java 9中调试JShell。

使用Java 9 JShell

Java 9中的JShell完全集成在Java中,无需安装任何其他软件包,只需在命令行中输入`jshell`命令即可启动JShell:

% jshell

| Welcome to JShell -- Version 9

| For an introduction type: /help intro

jshell>

我们可以使用`/help`命令获取更多JShell命令:

jshell> /help

| Type a Java language expression, statement, or declaration.

| Or type one of the following commands:

/list [all|start|moduleName|packageName|class|method|vars|types]

list names of the above scope.

/set mode [INLINE|OFFLINE]

set the execution mode for snippets.

/set feedback [VERBOSE|NORMAL|TERSE]

set the feedback mode.

/set editor " -e "

set the editor to use for external editor integration.

/edit

edit a source entry referenced by its name or id.

/redefine [-p]

re-define a source entry with the specified name, or

re-define the previous one. Use -p for a pattern.

/save [-all|-history|-start]

save snippets to a file.

/open [-restore]

open a file as a jshell input source. Use -restore to restore

file state, such as last open snippet.

/history [-all|-start]

history of what was entered.

/reset

reset jshell's state.

...

调试JShell

在JShell中调试代码时,我们可以使用`/set feedback VERBOSE`命令启用详细输出,这样我们可以更清楚地了解在JShell中发生了什么。例如,在JShell中创建一个方法:

jshell> int add(int a, int b) {

...> return a + b;

...> }

| created method add(int,int)

我们可以使用`/list`命令列出当前JShell作用域中的所有内容:

jshell> /list

add(int,int)

我们可以使用`/edit`命令编辑之前创建的方法:

jshell> /edit add

| ...edit the definition of add(int,int)

| int add(int a, int b) {

| return a * b; // made an error here

| }

修改了方法内容后,如果我们调用该方法会发现返回结果并不是预期结果:

jshell> add(2, 3)

$1 ==> 6

我们可以使用`/set feedback VERBOSE`命令启用详细输出来分析错误,结果显示参数与返回值:

jshell> /set feedback VERBOSE

jshell> add(2, 3)

| add(int,int) // method call details

| Expression value is: 6

| assigned to temporary variable $2 of type int

现在,我们知道了问题所在,并且可以对其进行更正:

jshell> /edit add

| ...edit the definition of add(int,int)

| int add(int a, int b) {

| return a + b;

| }

| modified method add(int,int)

再次调用`add`方法:

jshell> add(2, 3)

$4 ==> 5

现在我们得到了预期的结果,并且已经成功地调试了JShell中的代码。

结论

JShell使Java代码的快速测试和探索变得更加容易。在Java 9中,我们可以使用命令行中的`jshell`命令启动JShell。为了在JShell中调试代码,我们可以使用`/set feedback VERBOSE`命令启用详细输出,并使用`/list`和`/edit`命令来管理作用域中的内容。通过对代码的修改和重新运行,我们可以轻松调试JShell中的Java代码。

后端开发标签