2016-11-24 51 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命令來查看重定向方法的定義,如上所述。將這些添加到一個類會讓你獲得訪問權 - 但這很醜陋。或者,你可以在一個類中使它們成爲公共的靜態方法,並導入它們。