he visto algo de código como:Java out.println() ¿cómo es esto posible?
out.println("print something");
me trataron import java.lang.System;
pero no está funcionando. ¿Cómo se usa out.println()
?
he visto algo de código como:Java out.println() ¿cómo es esto posible?
out.println("print something");
me trataron import java.lang.System;
pero no está funcionando. ¿Cómo se usa out.println()
?
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.
PrintStream out = System.out;
out.println("hello");
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();
y ahora no "crear" un objeto :) – sfussenegger
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 –
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
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.
'out' no es un método, es un campo. – sfussenegger
doh! Gracias por atrapar eso. Quise decir campo. – Casey
O simplemente:
System.out.println("Some text");
@ 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:
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.
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
@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. –
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
Esto se puede ver también en los zócalos ...
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println("hello");
out
es un tipo de variable estática (objeto) de la clase System
PrintStream
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).
simplemente importar:
import static java.lang.System.*;
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