【问题标题】:Unexpected runtime error placement in simple Java code简单 Java 代码中的意外运行时错误放置
【发布时间】:2015-01-27 17:09:33
【问题描述】:

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

    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 值,但它是在异常开始后得到的。虽然,在某种程度上,我认为这是一个愚蠢的问题(因为代码完成了它应该做的事情),但我不禁想知道为什么在先前的命令完全终止之前出现错误。程序执行堆栈中发生了什么来实现这一点?

【问题讨论】:

  • @EJP,我已经准备好看到问题已经得到解答,但是您链接到的问题是......完全不同?也许您打算链接到另一个问题?不过,大卫华莱士给出的答案似乎是正确的。
  • 我重新打开了这个。它显然不是它被关闭的那个的副本。

标签: java error-handling runtime-error


【解决方案1】:

控制台有两个流,您的程序可以将其用于输出。有“标准输出”和“标准错误”。您明确地将消息放在“标准输出”上;并且您的异常消息转到“标准错误”。

现在,虽然这两个流都在控制台结束,但“标准输出”有一个小缓冲区。因此,进入“标准错误”的文本可以在首先进入“标准输出”的文本之前到达控制台。

您可以通过混合调用 System.out.printSystem.err.print 来进行试验。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2018-06-24
    • 2021-11-05
    相关资源
    最近更新 更多