2010-07-02 19 views

Respuesta

48

En Java System.out.println() se imprimirá al estándar fuera del sistema que está utilizando. Por otro lado, System.err.println() imprimirá al error estándar.

Si está utilizando una sencilla aplicación de consola de Java, ambas salidas serán los mismos (la línea de comandos o consola) pero se puede volver a configurar las corrientes de modo que, por ejemplo, System.out sigue imprimiendo a la consola pero System.err escribe en un archivo .

Además, los IDEs como Eclipse muestran System.err en texto rojo y System.out en texto negro de forma predeterminada.

+21

Además, System.out se almacena temporalmente, y no es System.err –

+1

olvidado de eso, thx para esclarecerlo noelmarkham –

+3

No difamando su respuesta, pero normalmente se denomina salida estándar y error estándar (stdout/stderr) en lugar de salida estándar y error de salida. +1 a modo de disculpa por adelantado ya que, aparte de eso, estás en lo cierto. – paxdiablo

3

Esos comandos utilizan diferentes flujos de salida. De manera predeterminada, ambos mensajes se imprimirán en la consola, pero es posible, por ejemplo, redirigir uno o ambos a un archivo.

java MyApp 2>errors.txt 

Esto redirigirá a System.errerrors.txt archivo.

+3

'java MyApp 2> errors.txt' qué es' 2> 'y cómo ¿funciona? ¿puedes explicar? – UnKnown

17

System.out es "salida estándar" (stdout) y System.err es "salida de error" (stderr). Junto con System.in (stdin), estos son los tres flujos de E/S estándar en el modelo de Unix. La mayoría de los entornos de programación modernos (C, Perl, etc.) son compatibles con este modelo.

La secuencia de salida estándar se utiliza para imprimir la salida de "operaciones normales" del programa, mientras que la secuencia de error es para "mensajes de error". Estos deben estar separados, aunque en la mayoría de los casos aparecen en la misma consola.

Supongamos que tiene un programa simple donde ingresa un número de teléfono e imprime a la persona que tiene ese número. Si ingresa un número no válido, el programa debe informarle de ese error, pero no debe hacer eso como la respuesta: Si ingresa "999-ABC-4567" y el programa imprime un mensaje de error "No es válido número ", eso no significa que haya una persona llamada" No es un número válido "cuyo número es 999-ABC-4567. Por lo tanto, no imprime nada en la salida estándar y se imprime el mensaje "No es un número válido" en la salida del error.

+0

Creo que esta es la mejor respuesta, ya que explica el significado de las secuencias. –

-1

Vale la pena señalar que un sistema operativo tiene una cola para System.err y System.out. Considere el siguiente código:

public class PrintQueue { 
    public static void main(String[] args) { 
     for(int i = 0; i < 100; i++) { 
      System.out.println("out"); 
      System.err.println("err"); 
     } 
    } 
} 

Si se compila y ejecuta el programa, se verá que el orden de las salidas de la consola está mezclado.

Un SO se mantendrá en orden si trabaja con System.out o System.err solamente. Pero puede elegir al azar qué imprimir junto a la consola, si usa ambos.

Incluso en este fragmento de código se puede ver que el orden se mezcla a veces:

public class PrintQueue { 
    public static void main(String[] args) { 
     System.out.println("out"); 
     System.err.println("err"); 
    } 
} 
+0

"Un sistema operativo tiene una cola para' System.err' y 'System.out'." Esa es una declaración muy general y no necesariamente precisa. ¿Sobre qué base haces esa declaración? [Cita requerida] En una aplicación de consola (como 'cmd' o' terminal'), ambas secuencias ("colas" como las llama esta respuesta) parecen fusionarse (porque se muestran en el mismo emulador de terminal), pero en realidad están separados. Consulte [Diferencia entre 'stdout',' stderr' y 'stdin'] (https://stackoverflow.com/a/3385261/2225787) para obtener más información. –