为什么我的jshell实例(JDKVersion9-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有什么指示吗?
发布于 2017-05-09 07:53:58
早期版本的JShell有一个预定义的printf方法,但它已从早期访问构建中删除。当然,您可以定义自己的printf方法:
jshell> void printf(String format, Object... args) { System.out.printf(format, args); }或者,您可以通过以下方式启动JShell,从而获得早期版本中的打印方法:
jshell --start DEFAULT --start PRINTING(如果只使用--start PRINTING,则不会获得默认导入。)
有关更多信息,请参见Java数据库中的bug JDK-8172102和实现它的变更集b2e915d476be。
发布于 2017-05-05 07:06:36
Java是一种面向对象的语言,如果没有与该方法关联的对象,就不能调用非静态方法。printf是类PrintStream的一个非静态方法,在没有PrintStream实例的情况下不能调用它。
标准Java库中有一些PrintStream实例,如System.out和System.err,因此您可以调用System.out.printf()或System.err.printf(),但是普通printf()无法工作,因为jshell不知道这个printf()属于哪个对象。
发布于 2017-05-05 06:51:51
如果没有jshell,它简单地工作吗?这不能像这样工作,因为在PrintStream之外没有这样的方法。
您可以这样定义自己的printf:
jshell> private void printf(String s) { System.out.println(s); }然后再用它:
jshell> printf("test")
testhttps://stackoverflow.com/questions/43798036
复制相似问题