Duda con System.out y System.err

Soy estudiante de los primeros grados en la ingenieria en desarrollo de software y en esto de java soy nuevo y me surge la duda de que diferencia hay entre:

Sytem.out y System.err

Me dieron como ejemplo el siguiente código pero no me queda clara la diferencia, si me puedieran orientar sino es mucha molestia.

 

Se que esto es muy básico, pero me gustaria tener el concepto claro para seguir avanzado sin dudas en java.

De antemano gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Básico ciertamente

Esto es básico pero no de Java ni de programación, sino de conceptos de cómputo en sistemas operativos "modernos" (o sea desde el UNIX de los 70's).

Los procesos que corren en una computadora tienen dos salidas por lo general: La salida estándar y la salida de error.

La salida estándar es en donde generalmente se imprimen mensajes visibles al usuario y la salida de error es donde se imprimen mensajes de error, cuando algo sale mal o pasa algo inesperado, etc.

Por lo general ambas salidas van a "consola", o sea la terminal de texto desde donde se ejecuta el programa. Pero se pueden redirigir a archivos, una o ambas (puedes redirigir la salida de error a un archivo y dejar la salida estándar en la pura pantalla por ejemplo, o redirigir cada salida a un archivo distinto).

En Windows creo que se perdió el concepto de la consola por la necedad de que el SO fuera completamente gráfico, no sé qué pasa ahí cuando imprimes a una de estas salidas.

Busca acerca de pipes, text streams, standard output, standard error.