2010-03-23 65 views

回答

81

靜態導入做的伎倆:

import static java.lang.System.out; 

或者也可以導入每一個靜態方法和字段使用

import static java.lang.System.*; 

附錄由@Steve C:請注意@sfussenegger在對我的答案發表評論時說過這一點。

「使用System.out的這種靜態導入不僅適用於簡單的運行代碼。」

所以,請不要以爲他(我)認爲,這一解決方案是很好的做法。

+1

與大多數ide這些日子一樣,它會爲你修復它,在eclipse中做一個組織導入,它會改變你的java.lang.System。*;到java.lang.System.out;爲你(假設你只是用掉) – hhafez 2010-03-23 22:58:16

26
PrintStream out = System.out; 
out.println("hello"); 
1

您必須創建一個對象第一。更多關於此這裏:

// write to stdout 
    out = System.out; 
    out.println("Test 1"); 
    out.close(); 
+0

,現在你不「創造」的對象:) – sfussenegger 2010-03-23 22:48:54

+0

官方的Java文檔使用的術語是作爲一個「創建對象」藏漢我想你指的是「實例化「http://java.sun.com/docs/books/tutorial/java/javaOO/objectcreation.html – 2010-03-23 22:51:23

+0

根本不創建或實例化對象。您只需複製參考。因此'System.out'和'out'會引用同一個對象,即'System.out == out'將會是'true' – sfussenegger 2010-03-23 22:57:15

5

那麼,你通常會使用

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。

+1

'out'不是一種方法,它是一個領域。 – sfussenegger 2010-03-23 22:41:25

+0

doh!感謝您的支持。我打算說現場。 – Casey 2010-03-23 23:09:28

0

或者乾脆:

System.out.println("Some text"); 
14

@ sfussenegger的回答解釋瞭如何使這項工作。但我會說不要這樣做

有經驗的Java程序員使用,並期望看到

 System.out.println(...); 

,而不是

 out.println(...); 

的System.out的靜態導入或System.err的是(IMO)不良作風,因爲:

  • 它打破了公認的習慣用語,並且
  • 它使它難以追蹤在測試過程中添加並且未被移除的不需要的痕跡。

如果你發現自己做了很多輸出到System.out或System.err,我認爲把流抽象成屬性,局部變量或方法更好。這將使您的應用程序更加可重用。

+1

我同意缺少「系統」。一開始可能會讓人困惑。使用局部變量或屬性並不會真的改變任何東西,是嗎?使用本地'protected void println(Object o){System.out.println(o);}'可能是一個好主意,但是輸出目標可以很容易地改變,比如說'log.info(o)' 。 – sfussenegger 2010-03-23 23:35:55

+1

@sfussenegger - 使用局部變量或屬性*確實*比在整個地方使用System.out更容易更改目標...是否導入System.out。 – 2010-03-24 06:15:35

+1

好的,那是真的。但也可以用一個叫做out的字段替換System.out的靜態導入 - 不需要將System.out指定爲out。但總的來說,我同意你的看法。使用System.out的這種靜態導入不僅適用於簡單的運行一次代碼。 – sfussenegger 2010-03-24 07:57:56

1

你也可以看到這個插座...

PrintWriter out = new PrintWriter(socket.getOutputStream()); 

out.println("hello"); 
3

outPrintStreamSystem類的靜態變量(對象)和println()PrintStream類的功能。

class PrintStream 
{ 
    public void println(){} //member function 
    ... 
} 

class System 
{ 
    public static final PrintStream out; //data member 
    ... 
} 

這就是爲什麼靜態變量(對象)out與類名System其進一步調用方法的它println()的類型PrintStream(這是一類)進行訪問。

1

只需輸入:

import static java.lang.System.*;