有一点需要特别注意,你无法创建一个“顶级”静态方法。如果你这样做,就会收到一条警告信息,告诉你static关键词被忽略了。
jshell> public static String foobar(String arg) { ...> return arg; ...> } | Warning: | Modifier 'static' not permitted in top-level declarations, ignored | public static void foobar(String arg) { | ^-----------^ 临时变量除了显式声明和定义的变量外,JShell会自动为任何未赋值表达式创建变量。在上一节调用getSeparator和getRandomAudience方法时,你可能已经注意到这些变量,我们称为“临时变量(Scratch Variables)”。
临时变量遵循一个固定的模式,以$开头,后面跟一个递增的数字。你可以像引用其他任何变量一样引用它们。例如,我们再次调用getRandomAudience方法,把结果作为System.out.println的参数。
jshell> getRandomAudience() $14 ==> "galaxy" jshell> System.out.println($14) galaxy 类在JShell中,你可以像创建方法一样创建类,一行一行输入,直到类结束。JShell会提醒你,类已创建。
jshell> public class Foo { ...> private String bar; ...> public String getBar() { ...> return this.bar; ...> } ...> } | created class Foo在JShell中创建类(和方法)非常费力。没有格式,犯错会令人沮丧,因为在你完成这个类之前你都不知道自己已经犯错了。要了解更好的类创建方式,请查阅下一节里JShell命令的/open命令。
扩展类库到目前为止,我们对JShell有了基本的了解,你可能会想知道,如何在JShell中使用外部类库(jars),如公司内部库或像Apache Commons这样的公共库。幸运的是,这很容易。你只要在启动JShell时使用--class-path参数。该参数使用带有分隔符的标准类路径格式。
$ jshell --class-path /path/to/foo.jar JShell命令到目前为止,我们仅仅使用了Java表达式,但JShell还提供了若干内置命令。让我们换个角度,探索下JShell中可用的命令。要查看所有可用命令的列表,在提示符下输入/help。注意,tab补全也适用于命令。
jshell> /help | Type a Java language expression, statement, or declaration. | Or type one of the following commands: | /list [<name or id>|-all|-start] | list the source you have typed | /edit <name or id> | edit a source entry | /drop <name or id> | delete a source entry (shortened for brevity)如果你想了解有关特定命令的详细信息,你可以输入/help <command>,用命令的名字代替<command>。
jshell> /help list | | /list | ===== | | Show the snippets, prefaced with their snippet IDs.让我们看一些最有用的命令。
List命令/list命令输出之前输入的所有代码片段,而且每一段都有一个独一无二的标识,称为片段ID。
jshell> /list 1 : var greeting = "hello"; 2 : var audience = "world"; 3 : var saying = greeting + audience; 4 : saying.toUpperCase()在默认情况下,输出不包含任何产生了错误的片段。只有有效的语句或表达式才会显示。
要查看之前输入的所有代码,包括错误,则可以给/list命令传入参数-all。
s1 : import java.io.*; s2 : import java.math.*; s3 : import java.net.*; (shortened for brevity) s10 : import java.util.stream.*; 1 : var greeting = "hello"; 2 : var audience = "world"; 3 : var saying = greeting + audience; 4 : saying.toUpperCase() e1 : var thisIsAnError