为什么我的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
任何指针?
答案 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.out
和System.err
,因此您可以调用System.out.printf()
或System.err.printf()
,但是printf()
1}}不起作用,因为jshell
不知道此printf()
属于哪个对象。
答案 3 :(得分:0)
这可能更方便:
jshell> /set start -retain DEFAULT PRINTING
(需要设置一次。下次你可以简单地启动jshell而不需要任何参数)。请参阅official jshell documentation。