2016-10-04 10 views
0

System.err.println()の出力の位置。コード内の位置が類似していても出力が変化します。 System.err.println()の同じ位置の4つのケースを参照してください。その中での出力の位置は変化しています。 comments.pleaseのプログラムの最後の出力を見てください実行の順序を説明してください。驚くべき出力をあなた自身が見るには以下のコードを試してみてください。System.err.println()の出力の位置。変わってきている?

public class System_Ex6 { 
    public static void main(String[] args)throws Exception { 

     System.out.println("-----------------case 1-------------------"); 
     System.out.println("Java"); 
     System.err.println("ErrorStatement<======Please observe the position of it "); //output comes in red ink color 

     System.out.println(System.getProperty("java.version")); 
     System.out.println(System.getProperty("os.name")); 
     //System.out.println(System.getProperty("os.version")); 
     System.out.println(System.getProperty("java.Vendor")); 
     //System.out.println(System.getProperty("os.version")); 
     System.gc(); 

     System.out.println("-----------------case 2-------------------"); 
     System.out.println("Java"); 
     System.err.println("ErrorStatement<======Please observe the position of it "); //output comes in red ink color 

     System.out.println(System.getProperty("java.version")); 
     System.out.println(System.getProperty("os.name")); 
     //System.out.println(System.getProperty("os.version")); 
     System.out.println(System.getProperty("java.Vendor")); 
     //System.out.println(System.getProperty("os.version")); 
     System.gc(); 

     System.out.println("-----------------case 3-------------------"); 
     System.out.println("Java"); 
     System.err.println("ErrorStatement<======Please observe the position of it "); //output comes in red ink color 

     //System.out.println(System.getProperty("java.version")); 
     System.out.println(System.getProperty("os.name")); 
     System.out.println(System.getProperty("os.version")); 
     System.out.println(System.getProperty("java.Vendor")); 
     //System.out.println(System.getProperty("os.version")); 
     System.gc(); 

     System.out.println("-----------------case 4-------------------"); 
     System.out.println("Java"); 
     System.err.println("ErrorStatement<======Please observe the position of it "); //output comes in red ink color 

     System.out.println(System.getProperty("java.version")); 
     System.out.println(System.getProperty("os.name")); 
     //System.out.println(System.getProperty("os.version")); 
     System.out.println(System.getProperty("java.Vendor")); 
     System.out.println(System.getProperty("os.version")); 
     System.gc(); 



    }//main() 

}//class 
/* 
output: 
======= 

-----------------case 1------------------- 
Java 
1.8.0_74 
Windows 8 
null 
ErrorStatement<======Please observe the position of it 
-----------------case 2------------------- 
Java 
1.8.0_74 
ErrorStatement<======Please observe the position of it 
Windows 8 
null 
-----------------case 3------------------- 
Java 
ErrorStatement<======Please observe the position of it 
Windows 8 
6.2 
null 
-----------------case 4------------------- 
Java 
1.8.0_74 
Windows 8 
null 
6.2 
ErrorStatement<======Please observe the position of it 



*/ 
+0

上記の4つのケースすべてのように、この質問にもっと多くの問題があると思いますが、大部分のコードは同じですが、 "os.version"を呼び出すと大きな違いがありますが、これはSystem.out.flush()を呼び出します。およびSystem.err.flush();内部に?? –

答えて

-1

System.outSystem.err 2つの異なるストリームであり、異なる時間にフラッシュされます。

+0

なぜ私は-1sを得ていますか?この問題の正確な理由は次のとおりです –

0

システムでプログラムを実行すると、ErrorStatement行の相対位置はすべての場合で同じになります。ここで

は、私が見たものです。

$ java System_Ex6 
-----------------case 1------------------- 
Java 
ErrorStatement<======Please observe the position of it 
1.8.0_102 
Linux 
null 
-----------------case 2------------------- 
Java 
ErrorStatement<======Please observe the position of it 
1.8.0_102 
Linux 
null 
-----------------case 3------------------- 
Java 
ErrorStatement<======Please observe the position of it 
Linux 
4.7.5-100.fc23.x86_64 
null 
-----------------case 4------------------- 
Java 
ErrorStatement<======Please observe the position of it 
1.8.0_102 
Linux 
null 
4.7.5-100.fc23.x86_64 

$ java -version 
openjdk version "1.8.0_102" 
OpenJDK Runtime Environment (build 1.8.0_102-b14) 
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode) 

あなたが見ているどのような実装固有の成果物です。 Javaやコンソールプログラムで、System.out/System.errに書き込まれたデータを読み込んで、あなたが見ているスクロールしているテキストバッファに書き込んでいて、コピーして貼り付けることができます。

ボトムライン:この動作は指定されていないため、この動作に頼ることはできません。異なるシステムで異なるという事実は驚くべきことではありません。

+0

私はEclipseの火星jdk8を使っています。C:\ Users \ jack \ Desktop \ testJavaPrgms> java -version java version "1.8.0_74" Java(TM)SEランタイム環境1.8.0_74-b02) Java HotSpot(TM)クライアントVM(ビルド25.74-b02、混合モード、共有) –

+0

JDKを変更する必要はありますか? –

+0

あなたはしません。あなたが本当に必要とするのは、 'System.out'と' System.err'出力の予測可能なインターリーブに依存するプログラムの作成を避けることです。 –

関連する問題