JShell:Java REPL综合指南

Java Shell或JShell是官方提供的读取-求值-打印-循环,通常称为REPL,是在Java 9中引入的。它提供了一个交互式shell,用于快速原型、调试、学习Java及Java API,所有这些都不需要public static void main方法,也不需要在执行之前编译代码。此外,随着Java 10引入了var关键词,JShell简单了许多(而且更实用了)。

入门

注意:在这份指南中,为了使用关键词var,我们将使用Java 10,因此,为了跟着这份指南操作,你务必要确保至少已经安装了Java 10。

JShell的启动很容易,在命令行输入jshell即可。你会看到一条欢迎信息,而shell会等待你输入命令或任何合法的Java表达式。

$ jshell | Welcome to JShell -- Version 10.0.2 | For an introduction type: /help intro

让我们执行第一条命令。在shell提示符下,输入var greeting = "hello",按下<enter>。你会看到下面的输出:

jshell> var greeting = "hello" greeting ==> "hello"

你会注意到,它回显了greeting的值,确认当前值为hello。你可能还会注意到,你的表达式不需要分号。这是一个小而漂亮的特性!

为了完成我们的问候语,我们需要的一位听众。输入var audience =并按下<enter>。这次,JShell认识到,你的表达式不完整,并允许你在下一行继续输入。输入"world"并按下<enter>完成表达式。和前面一样,JShell会回显确认已设置的值。

jshell> var audience = ...> "world" audience ==> "world" Tab补全

你首先注意到的其中一件事情是,它完美集成了tab补全。

让我们把字符串greeting和audience串联起来,组成一个新变量saying。先输入var saying = gr,然后按下<tab>。你会看到,变量greeting自动补全了。用同样的方法输入变量audience,按下<enter>,就可以看到串联结果了。

jshell> var saying = gr<tab> + aud<tab> saying ==> "helloworld"

Tab补全就和你预想的一样,自动补全唯一值或者在不确定时提供可能的值。它对之前输入的任何表达式、对象和方法均有效。注意,它对内置关键词无效。

如果你想要把变量saying变成大写,但是又没记住方法的具体名称,那么你只要输入saying.to,然后按下<tab>,就可以看到所有以to开头的所有有效方法了。

jshell> saying.to<tab> toCharArray() toLowerCase( toString() toUpperCase(

可能有参数的方法显示时使用开括号,而没有参数的方法显示时使用闭括号。

错误

如果你不小心犯了个错误或者输入了一个非法表达式、方法或命令,那么JShell会立即反馈,显示错误,标注问题。

jshell> saying.subString(0,1) | Error: | cannot find symbol | symbol: method subString(int,int) | saying.subString(0,1) | ^--------------^ 方法签名

让我们调用toUpperCase方法,但推迟添加任何额外的参数,或者以一个圆括号结束。再次按下<tab>。这次,你会看到toUpperCase方法所有可用的方法签名;一个有一个Locale参数,另一个没有任何参数。

jshell> saying.toUpperCase( Signatures: String String.toUpperCase(Locale locale) String String.toUpperCase() <press tab again to see documentation> 文档(JavaDoc)

如果你第三次按下<tab>,你就会看到toUpperCase(Locale)方法的JavaDoc文档。

jshell> saying.toUpperCase( String String.toUpperCase(Locale locale) Converts all of the characters in this String to upper case ... (shortened for brevity)

继续按下<tab>,就可以依次查看所有可用的方法签名及其相关文档。

导入

让我们把这个例子扩展到其他的听众,如Universe和Galaxy,而不仅仅是hello world。首先创建一个名为audiences的列表,其中有三个不同的听众:world、universe、galaxy。使用List构造函数和Java 9提供的静态工厂方法,只需要一行代码即可实现。

jshell> var audiences = new ArrayList<>(List.of("world", "universe", "galaxy")) audiences ==> [world, universe, galaxy]

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7c3c84b6ca84b4524bd9151d1c783757.html