简单Java代码中出现意外的运行时错误

时间:2014-11-29 04:26:36

标签: java error-handling runtime-error

我为考试中的多项选择问题生成了以下代码:

    String a = "";
    String b = null;
    String c = null;
    String d = "";
    String e = new String("");
    System.out.print((b==c) +" ");
    System.out.print((a==d) +" ");
    System.out.print((d==e) +" ");
    System.out.print((d.equals(e)) +" ");
    System.out.println(c.equals(b));

我预期的输出是:

true true false true Exception in thread "main" java.lang.NullPointerException

我收到的输出非常接近,但无序:

true true false Exception in thread "main" true java.lang.NullPointerException

它确实获得了最后true值,但它在异常开始后得到了它。虽然,在某种程度上,我认为这是一个愚蠢的问题(因为代码确实排序了它应该是什么),我不禁想知道为什么错误在前一个命令完全终止之前出现。为了实现这一目标,程序执行堆栈中发生了什么?

1 个答案:

答案 0 :(得分:2)

控制台有两个流,您的程序可以用它来输出。有"标准输出"和"标准错误"。您明确地将消息放在"标准输出&#34 ;;并且您的异常消息转到"标准错误"。

现在,虽然这两个流最终都出现在控制台上,但是#34;标准输出"有一个小缓冲区。因此,文字转到"标准错误"可以到达控制台AHEAD OF文本转到"标准输出"第一

您可以通过混合调用System.out.printSystem.err.print

来试验这一点

this page上有一些很好的信息。