2010-03-23 18 views

Respuesta

81

importaciones estáticas hace el truco:

import static java.lang.System.out; 

o alternativamente importación Cada método estático y el campo usando

import static java.lang.System.*; 

Adición por @Steve C: tenga en cuenta que @sfussenegger dijo esto en un comentario sobre mi respuesta.

"por medio de una importación de tales estática de System.out no es adecuado para más que un simple código de una sola ejecución."

Así que por favor no imagine que él (o yo) creo que esta solución es una buena práctica.

+1

con la mayoría de las ide en estos días, lo arreglará para usted de todos modos, en eclipse haga una organización de importaciones y cambiará su java.lang.System. *; a java.lang.System.out; para usted (suponiendo que solo esté usando) – hhafez

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

Usted tendrá que crear un objeto cabo primero. Más sobre esto aquí:

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

y ahora no "crear" un objeto :) – sfussenegger

+0

La documentación oficial de Java utiliza el término "crear el objeto" aswell como la que yo supongo que usted se refiere a "instantiate "http://java.sun.com/docs/books/tutorial/java/javaOO/objectcreation.html –

+0

No crea ni instancia un objeto en absoluto. Simplemente copie la referencia. Por lo tanto, 'System.out' y' out' harán referencia al mismo objeto, es decir, 'System.out == out' será' true' – sfussenegger

5

Bueno, lo más habitual es utilizar

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

que no requiere ninguna importación. Sin embargo, desde fuera es un campo estático dentro del sistema, se podría escribir una importación de usar estático como sigue:

import static java.lang.System.*; 

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

Tome un vistazo a este link. En general, solo harías esto si estás usando muchos métodos estáticos de una clase en particular, como yo lo uso todo el tiempo para junit asserts, y easymock.

+1

'out' no es un método, es un campo. – sfussenegger

+0

doh! Gracias por atrapar eso. Quise decir campo. – Casey

0

O simplemente:

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

@ respuesta de sfussenegger explica cómo hacer este trabajo. Pero yo diría ¡no lo hagas!

programadores experimentados Java utilizan, y esperan ver

 System.out.println(...); 

y no

 out.println(...); 

Un importación estática de System.out o System.err es (OMI) mal estilo porque:

  • rompe la expresión aceptada, y
  • lo hace más difícil de rastrear impresiones de trazas no deseadas que se agregaron durante la prueba y no se eliminaron.

Si te encuentras realizando muchos trabajos en System.out o System.err, creo que es mejor resumir las secuencias en atributos, variables locales o métodos. Esto hará que su aplicación sea más reutilizable.

+1

Acepto un "Sistema" que falta. podría ser confuso a primera vista. Sin embargo, el uso de variables o atributos locales realmente no cambia nada, ¿o sí? Sin embargo, puede ser una buena idea utilizar una 'impronta de vacíos protegida local (Objeto o) {System.out.println (o);}', ya que el destino de salida podría cambiarse fácilmente, por ejemplo, 'log.info (o)' . – sfussenegger

+1

@sfussenegger: el uso de una variable local o un atributo * does * hace que sea más fácil cambiar el destino que utilizar System.out en cualquier lugar ... independientemente de si System.out se importa o no. –

+1

bien, eso es cierto. Pero también es posible reemplazar una importación estática de System.out por un campo llamado: no es necesario asignar System.out a out. Pero, en general, estoy de acuerdo contigo. El uso de una importación estática de System.out no es adecuado para más que simples códigos de ejecución única. – sfussenegger

1

Esto se puede ver también en los zócalos ...

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

out.println("hello"); 
3

out es un tipo de variable estática (objeto) de la clase SystemPrintStream y println() es función de la clase PrintStream.

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

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

Por eso se accede a la variable estática (objeto) out con el nombre de clase System que invoca además el método println() de su tipo PrintStream (que es una clase).

1

simplemente importar:

import static java.lang.System.*; 
Cuestiones relacionadas