JavaのSystem.out.println()
との違いは何ですか?System.err.println()
7 に答える
Java ではSystem.out.println()
、使用しているシステムの標準出力に出力されます。一方、System.err.println()
標準エラーに出力されます。
単純な Java コンソール アプリケーションを使用している場合、両方の出力 (コマンド ラインまたはコンソール) は同じになりますが、ストリームを再構成して、たとえば、System.out
引き続きコンソールに出力しSystem.err
、ファイルに書き込むことができます。
また、Eclipse などの IDE は、デフォルトSystem.err
で赤いテキストとSystem.out
黒いテキストで表示されます。
System.out は「標準出力」(stdout) で、System.err は「エラー出力」(stderr) です。System.in (stdin) とともに、これらは Unix モデルの 3 つの標準 I/O ストリームです。最新のプログラミング環境 (C、Perl など) のほとんどは、このモデルをサポートしています。
標準出力ストリームは、プログラムの「通常の操作」からの出力を出力するために使用されますが、エラー ストリームは「エラー メッセージ」用です。これらは別々にする必要がありますが、ほとんどの場合、同じコンソールに表示されます。
電話番号を入力すると、その番号を持っている人が表示される簡単なプログラムがあるとします。無効な番号を入力した場合、プログラムはそのエラーを通知する必要がありますが、答えとしてそれを行うべきではありません: 「999-ABC-4567」と入力すると、プログラムは「有効な番号ではありません」というエラー メッセージを出力します。 、それは、番号が 999-ABC-4567 である「無効な番号」という名前の人がいるという意味ではありません。したがって、標準出力には何も出力されず、「有効な数値ではありません」というメッセージがエラー出力に出力されます。
たとえば、標準出力を画面に出力し、エラー出力をファイルに出力するなど、実行環境を設定して 2 つのストリームを区別できます。
これらのコマンドは、異なる出力ストリームを使用します。デフォルトでは、両方のメッセージがコンソールに出力されますが、たとえば、これらの一方または両方をファイルにリダイレクトすることが可能です。
java MyApp 2>errors.txt
これにより、ファイルにリダイレクトさSystem.err
れerrors.txt
ます。
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
System.out.println("wassup");
ユーザーからの適切な入力に関連する特定の結果を出力する必要がある場合を指し、System.err.println("duh, that's wrong);
提供された入力が間違っているか、その他のエラーがあることを示すための参照です。
ほとんどの IDE では、これが赤色 ( System.err.print
) で示されます。
OS には、System.err と System.out の両方に対して 1 つのキューがあることに注意してください。次のコードを検討してください。
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 のみを使用する場合、OS は正しい順序のままになります。ただし、これらの両方を使用すると、コンソールの次に何を印刷するかをランダムに選択できます。
このコード スニペットでも、順序が時々混同されていることがわかります。
public class PrintQueue {
public static void main(String[] args) {
System.out.println("out");
System.err.println("err");
}
}