2010-03-23 9 views

risposta

81

importazioni statiche fare il trucco:

import static java.lang.System.out; 

oppure importare ogni metodo statico e campo utilizzando

import static java.lang.System.*; 

Addendum per @Steve C: si noti che @sfussenegger ha detto questo in un commento sulla mia risposta.

"L'utilizzo di un'importazione statica di System.out non è più adatto a un semplice codice di esecuzione."

Quindi, per favore, non immaginare che lui (o io) pensi che questa soluzione sia una buona pratica.

+1

con la maggior parte delle ide in questi giorni lo aggiusterà comunque per te, in eclissi esegui un'importazione e cambierà il tuo java.lang.System. *; a java.lang.System.out; per te (supponendo che stai usando solo) – hhafez

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

Si dovrà creare un oggetto fuori prima. Ulteriori su questi qui:

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

e ora non si "crea" un oggetto :) – sfussenegger

+0

La documentazione ufficiale di Java usa il termine "creare l'oggetto" proprio come quello che credo si fa riferimento a "Instantiate "http://java.sun.com/docs/books/tutorial/java/javaOO/objectcreation.html –

+0

Non creare o creare un'istanza di un oggetto. Basta copiare il riferimento. Quindi 'System.out' e' out' faranno riferimento allo stesso oggetto, ovvero 'System.out == out' sarà' true' – sfussenegger

5

Beh, viene in genere utilizzato

System.out.println("print something"); 

che non richiede alcuna importazione. Tuttavia, dal momento che fuori è un campo statico all'interno del sistema, si potrebbe scrivere utilizzare un'importazione statico come questo:

import static java.lang.System.*; 

class Test { 
    public static void main(String[] args) { 
     out.println("print something"); 
    } 
} 

Date un'occhiata a questo link. Normalmente lo faresti solo se stai usando molti metodi statici di una particolare classe, come lo uso sempre per i junit assert e easymock.

+1

'out' non è un metodo, è un campo. – sfussenegger

+0

doh! Grazie per averlo capito. Intendevo dire campo. – Casey

0

O semplicemente:

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

@ risposta di sfussenegger spiega come fare questo lavoro. Ma direi che lo non lo faccio!

esperti programmatori Java usano, e si aspettano di vedere

 System.out.println(...); 

e non

 out.println(...); 

Un importazione statica System.out o System.err è (IMO) cattivo stile perché:

  • rompe l'idioma accettato e
  • lo rende È più difficile rintracciare le impronte di tracce indesiderate aggiunte durante il test e non rimosse.

Se vi trovate a fare un sacco di uscita per System.out o System.err, penso che sia meglio di astrarre i flussi in attributi, variabili locali o metodi. Ciò renderà la tua applicazione più riutilizzabile.

+1

Accetto un "Sistema" mancante. potrebbe essere confuso al primo sguardo. Tuttavia, l'uso di variabili o attributi locali non cambia nulla, vero? L'utilizzo di un 'protected void println (Object o) locale {System.out.println (o);}' potrebbe essere una buona idea anche se la destinazione di output potrebbe essere facilmente modificata, ad esempio 'log.info (o)' per esempio . – sfussenegger

+1

@sfussenegger: l'uso di una variabile locale o di un attributo * semplifica la modifica della destinazione rispetto all'utilizzo di System.out in tutto il luogo ... indipendentemente dal fatto che System.out sia importato o meno. –

+1

ok, è vero. Ma è anche possibile sostituire un'importazione statica di System.out con un campo chiamato, senza necessità di assegnare System.out a out. Ma generalmente, sono d'accordo con te. L'utilizzo di un'importazione statica di System.out non è più adatto a un semplice codice run-once. – sfussenegger

1

si può vedere questo anche in alveoli ...

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

out.println("hello"); 
3

out è un PrintStream tipo di variabile statica (oggetto) di System classe e println() è funzione della classe PrintStream.

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

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

Ecco perché la variabile statica (oggetto) out si accede con il nome di classe System che richiama ulteriormente il metodo println() del suo tipo PrintStream (che è una classe).

1

semplicemente importazione:

import static java.lang.System.*; 
Problemi correlati