Разница между System.out.println () и System.err.println () - PullRequest
43 голосов
/ 02 июля 2010

В чем разница между System.out.println() и System.err.println() в Java?

Ответы [ 7 ]

60 голосов
/ 02 июля 2010

В Java System.out.println() будет печатать в стандарте системы, которую вы используете. С другой стороны, System.err.println() будет печатать со стандартной ошибкой.

Если вы используете простое консольное приложение Java, оба вывода будут одинаковыми (командная строка или консоль), но вы можете перенастроить потоки так, чтобы, например, System.out по-прежнему печатал на консоль, а System.err записывал в файл.

Кроме того, IDE, такие как Eclipse, показывают System.err красным текстом и System.out черным текстом по умолчанию.

27 голосов
/ 02 июля 2010

System.out - это «стандартный вывод» (stdout), а System.err - «вывод ошибок» (stderr). Наряду с System.in (stdin) это три стандартных потока ввода-вывода в модели Unix. Большинство современных сред программирования (C, Perl и т. Д.) Поддерживают эту модель.

Стандартный поток вывода используется для печати вывода из «обычных операций» программы, в то время как поток ошибок предназначен для «сообщений об ошибках». Они должны быть отдельными - хотя в большинстве случаев они появляются на одной консоли.

Предположим, у вас есть простая программа, в которой вы вводите номер телефона, и она распечатывает человека, у которого есть этот номер. Если вы введете неправильный номер, программа должна сообщить вам об этой ошибке, но не должна делать это в качестве ответа : если вы введете «999-ABC-4567» и программа напечатает сообщение об ошибке «Недействительный номер», это не значит, что есть человек с именем «Недействительный номер», чей номер 999-ABC-4567. Таким образом, он ничего не выводит на стандартный вывод, а на вывод ошибки выводится сообщение «Недопустимый номер».

4 голосов
/ 02 июля 2010

Эти команды используют разные выходные потоки. По умолчанию оба сообщения будут напечатаны на консоли, но, например, возможно перенаправить одно или оба из них в файл.

java MyApp 2>errors.txt

Это перенаправит System.err в errors.txt файл.

2 голосов
/ 02 июля 2010

System.out Основной целью является стандартный вывод.

System.err Основной целью является выдача стандартной ошибки.


Посмотрите на эти

http://www.devx.com/tips/Tip/14698

http://wiki.eclipse.org/FAQ_Where_does_System.out_and_System.err_output_go%3F

0 голосов
/ 16 марта 2019

этот ответ, скорее всего, поможет вам, это очень просто System.err и System.out оба одинаковы и определены в классе System как ссылочная переменная класса PrintStream как public final static PrintStream out = null; и public final static PrintStream err = null;

означает, что оба ref.переменная PrintStream класса.обычно System.err используется для печати сообщений об ошибках, которые увеличивают возможность перенаправления для программиста.

Небольшое различие возникает в обоих случаях, когда мы работаем с Перенаправление оператор.

0 голосов
/ 16 марта 2019

System.out.println("wassup"); относится к тем случаям, когда вам необходимо вывести определенный результат, относящийся к правильному вводу, предоставленному пользователем, тогда как System.err.println("duh, that's wrong); является ссылкой, чтобы показать, что предоставленный ввод неправильный или есть какая-то другая ошибка.

Большинство IDE показывают это красным цветом (System.err.print).

0 голосов
/ 29 января 2017

Стоит отметить, что в ОС есть одна очередь для System.err и System.out.Рассмотрим следующий код:

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

Если вы скомпилируете и запустите программу, вы увидите, что порядок выводов в консоли перепутан.

ОС останется в правильном порядке, если вы работаете только с System.out или System.err.Но он может произвольно выбирать, что печатать рядом с консолью, если вы используете оба из них.

Даже в этом фрагменте кода вы можете видеть, что порядок иногда смешивается:

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