0

System.err.println() 的输出位置;即使它在代码中的位置相似,输出也会发生变化。请查看 System.err.println() 位置相同的 4 个案例;在其中,但其在输出中的位置是不同的。请在评论中查看程序最后的输出。请解释执行顺序。尝试以下代码自己查看惊人的输出。

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 



*/
4

2 回答 2

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 的数据并将其写入您所看到的滚动文本缓冲区......并从中复制粘贴。

底线:未指定此行为,您不能依赖它。在不同的系统上它是不同的这一事实并不奇怪。

于 2016-10-04T14:15:50.180 回答
-1

System.out并且System.err是 2 个不同的流,并且在不同的时间被刷新。

于 2016-10-04T13:53:48.913 回答