jshell - 无法找到printf

时间:2017-05-05 06:33:07

标签: java-9 jshell

为什么我的jshell实例(JDK Version 9-ea)无法识别printf()语句?以下是我观察到的错误,

jshell> printf("Print number one - %d",1)
|  Error:
|  cannot find symbol
|    symbol:   method printf(java.lang.String,int)
|  printf("Print number one - %d",1)
|  ^----^

我可以访问printf,只要我以常规方式指定它。

jshell> System.out.printf("Print number one - %d",1)
Print number one - 1$1 ==> java.io.PrintStream@1efbd816

任何指针?

4 个答案:

答案 0 :(得分:7)

早期版本的JShell预先定义了printf方法,但它已从早期访问版本中删除。您当然可以定义自己的printf方法:

jshell> void printf(String format, Object... args) { System.out.printf(format, args); }

或者您可以通过以下方式启动JShell来获取早期版本中的打印方法:

jshell --start DEFAULT --start PRINTING

(如果仅使用--start PRINTING,则无法获得默认导入。)

有关更多信息,请参阅Java错误数据库中的错误JDK-8172102和实现它的变更集b2e915d476be

答案 1 :(得分:1)

没有 jshell ,它只是吗?这不能像这样工作,因为 {/ em> PrintStream之外没有定义的方法。

您可以像这样定义自己的printf

jshell> private  void printf(String s) { System.out.println(s); }

后来使用它:

jshell> printf("test")
test

答案 2 :(得分:1)

Java是一种面向对象的语言,如果没有与此方法关联的对象,则无法调用非静态方法。 printf是类PrintStream的非静态方法,如果没有PrintStream实例,则无法调用它。

标准Java库中有一些PrintStream个实例,例如System.outSystem.err,因此您可以调用System.out.printf()System.err.printf(),但是printf() 1}}不起作用,因为jshell不知道此printf()属于哪个对象。

答案 3 :(得分:0)

这可能更方便:

jshell> /set start -retain DEFAULT PRINTING

(需要设置一次。下次你可以简单地启动jshell而不需要任何参数)。请参阅official jshell documentation