我已經看到了一些代碼,如:Java out.println()這怎麼可能?
out.println("print something");
我試圖import java.lang.System;
,但它不工作。你如何使用out.println()
?
我已經看到了一些代碼,如:Java out.println()這怎麼可能?
out.println("print something");
我試圖import java.lang.System;
,但它不工作。你如何使用out.println()
?
靜態導入做的伎倆:
import static java.lang.System.out;
或者也可以導入每一個靜態方法和字段使用
import static java.lang.System.*;
附錄由@Steve C:請注意@sfussenegger在對我的答案發表評論時說過這一點。
「使用System.out的這種靜態導入不僅適用於簡單的運行代碼。」
所以,請不要以爲他(我)認爲,這一解決方案是很好的做法。
PrintStream out = System.out;
out.println("hello");
您必須創建一個對象出第一。更多關於此這裏:
// write to stdout
out = System.out;
out.println("Test 1");
out.close();
,現在你不「創造」的對象:) – sfussenegger 2010-03-23 22:48:54
官方的Java文檔使用的術語是作爲一個「創建對象」藏漢我想你指的是「實例化「http://java.sun.com/docs/books/tutorial/java/javaOO/objectcreation.html – 2010-03-23 22:51:23
根本不創建或實例化對象。您只需複製參考。因此'System.out'和'out'會引用同一個對象,即'System.out == out'將會是'true' – sfussenegger 2010-03-23 22:57:15
那麼,你通常會使用
System.out.println("print something");
不需要任何進口。然而,由於出是系統內部的靜態字段,你可以寫使用靜態導入這樣的:
import static java.lang.System.*;
class Test {
public static void main(String[] args) {
out.println("print something");
}
}
看看這個link。通常情況下,只有在使用特定類的很多靜態方法時纔會這樣做,例如我一直在使用junit斷言和easymock。
'out'不是一種方法,它是一個領域。 – sfussenegger 2010-03-23 22:41:25
doh!感謝您的支持。我打算說現場。 – Casey 2010-03-23 23:09:28
或者乾脆:
System.out.println("Some text");
@ sfussenegger的回答解釋瞭如何使這項工作。但我會說不要這樣做!
有經驗的Java程序員使用,並期望看到
System.out.println(...);
,而不是
out.println(...);
的System.out的靜態導入或System.err的是(IMO)不良作風,因爲:
如果你發現自己做了很多輸出到System.out或System.err,我認爲把流抽象成屬性,局部變量或方法更好。這將使您的應用程序更加可重用。
我同意缺少「系統」。一開始可能會讓人困惑。使用局部變量或屬性並不會真的改變任何東西,是嗎?使用本地'protected void println(Object o){System.out.println(o);}'可能是一個好主意,但是輸出目標可以很容易地改變,比如說'log.info(o)' 。 – sfussenegger 2010-03-23 23:35:55
@sfussenegger - 使用局部變量或屬性*確實*比在整個地方使用System.out更容易更改目標...是否導入System.out。 – 2010-03-24 06:15:35
好的,那是真的。但也可以用一個叫做out的字段替換System.out的靜態導入 - 不需要將System.out指定爲out。但總的來說,我同意你的看法。使用System.out的這種靜態導入不僅適用於簡單的運行一次代碼。 – sfussenegger 2010-03-24 07:57:56
你也可以看到這個插座...
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println("hello");
out
是PrintStream
型System
類的靜態變量(對象)和println()
是PrintStream
類的功能。
class PrintStream
{
public void println(){} //member function
...
}
class System
{
public static final PrintStream out; //data member
...
}
這就是爲什麼靜態變量(對象)out
與類名System
其進一步調用方法的它println()
的類型PrintStream
(這是一類)進行訪問。
只需輸入:
import static java.lang.System.*;
與大多數ide這些日子一樣,它會爲你修復它,在eclipse中做一個組織導入,它會改變你的java.lang.System。*;到java.lang.System.out;爲你(假設你只是用掉) – hhafez 2010-03-23 22:58:16