问题描述
JShell是Java的交互式REPL命令行。
如果我的java类包含一些我想在.java文件中进行交互操作的方法,该如何在其中加载该文件?
class HelloWorld
{
public static void main(String[] argsv)
{
}
public static void doStuff()
{
System.out.println("Hello world");
}
}
,我想加载JShell并能够从命令行调用doStuff()
方法。我该怎么办?
以文件名JShell
开头$ JShell HelloWorld.java
无效。也没有classfile。我仍然从JShell收到错误cannot find symbol | symbol: variable HelloWorld
。使用/open <filename>
命令可获得相同的结果。
解决方法
无法复制:问题中描述的问题(“无效”)无法再现,因为它可以正常工作。
这里是Minimal,Reproducible Example,其中包含工作步骤,并在Java 9和Java 14上进行了测试。
首先,验证Java源文件的内容:
C:\Temp>type HelloWorld.java
class HelloWorld
{
public static void main(String[] argsv)
{
}
public static void doStuff()
{
System.out.println("Hello world");
}
}
我们可以使用Java 9中的JShell运行该命令,并使用命令行加载文件:
C:\Temp>jshell HelloWorld.java
| Welcome to JShell -- Version 9.0.4
| For an introduction type: /help intro
jshell> HelloWorld.doStuff()
Hello world
可以看出,Java源文件已加载得很好,并且static
方法的调用没有问题。
我们还可以使用Java 14中的JShell运行该命令,并使用/open
命令加载文件:
C:\Temp>jshell
| Welcome to JShell -- Version 14
| For an introduction type: /help intro
jshell> HelloWorld.doStuff()
| Error:
| cannot find symbol
| symbol: variable HelloWorld
| HelloWorld.doStuff()
| ^--------^
jshell> /open HelloWorld.java
jshell> HelloWorld.doStuff()
Hello world
我们首先尝试在/open
命令之前运行,以证明HelloWorld
不存在,即证明是/open
命令声明了该类。