2016-11-24 54 views
1

我一直在寻找到JDK9和我注意到,在jshell你没有前缀的printf()System.out.printf()即你可以写的printf(“测试”)但你不能写的println( “测试”)JDK 9 jshell printf()特殊处理?

enter image description here

这只是jshell的功能吗?如何在应用程序中实现相同的行为?

以下是最接近:

import static java.lang.System.out ; 
out.println("test"); 
out.printf("test"); 
+0

有关记录,'printf' [已删除](https://stackoverflow.com/a/43864201/6730571) –

+0

不支持java的创新步伐以及在语言的很多领域做出的决策打印是一个基本的和重要的功能,我不明白为什么他们从壳的默认导入 – firephil

回答

1

本品系貌似printf是JShell命令,但println不是(就像在bash shell中)。 System.out使用的printf()方法与jshell使用的方法不同,因此不能在java应用程序中静态导入。

来源:

http://jakubdziworski.github.io/java/2016/07/31/jshell-getting-started-examples.html https://jshelltutorial.com/jshells-printf-method/

+0

删除它检查我的屏幕截图... – firephil

+0

感谢更新显示您的使用情况。我编辑了我的答案,如果它仍然没有意义,请告诉我,我会进一步解释。 –

+0

我还在寻找一些见解,以及它是如何实现的......或者它只是jshell的一个特性 – firephil

1

在早期版本的早期访问有是重定向到System.out.printf预定的printf方法。这有两个问题:它不是标准的Java,正如在其他答案中指出的那样,print和println没有定义是不一致的。

在当前的早期访问和将要发布的内容中,没有自动定义的打印方法。如果你想要这个,请启动jshell:

jshell --start DEFAULT --start PRINTING 

这会给你一整套打印方法。

要回答问题的第二部分,可以通过在启动后使用/ method命令来查看重定向方法的定义,如上所述。将这些添加到一个类会让你获得访问权 - 但这很丑陋。或者,你可以在一个类中使它们成为公共的静态方法,并导入它们。