System.out - это «стандартный вывод» (stdout), а System.err - «вывод ошибок» (stderr). Наряду с System.in (stdin) это три стандартных потока ввода-вывода в модели Unix. Большинство современных сред программирования (C, Perl и т. Д.) Поддерживают эту модель.
Стандартный поток вывода используется для печати вывода из «обычных операций» программы, в то время как поток ошибок предназначен для «сообщений об ошибках». Они должны быть отдельными - хотя в большинстве случаев они появляются на одной консоли.
Предположим, у вас есть простая программа, в которой вы вводите номер телефона, и она распечатывает человека, у которого есть этот номер. Если вы введете неправильный номер, программа должна сообщить вам об этой ошибке, но не должна делать это в качестве ответа : если вы введете «999-ABC-4567» и программа напечатает сообщение об ошибке «Недействительный номер», это не значит, что есть человек с именем «Недействительный номер», чей номер 999-ABC-4567. Таким образом, он ничего не выводит на стандартный вывод, а на вывод ошибки выводится сообщение «Недопустимый номер».