java - 简单 Java 代码中的意外运行时错误位置

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

最佳答案

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

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

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

关于 this page 有一些很好的信息.

关于java - 简单 Java 代码中的意外运行时错误位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27198856/

相关文章:

java - 将图像从 J2ME 客户端上传到 Servlet

java - swingWorker 是否保证在完成时抛出状态属性更改事件?

java - Cloud Firestore java.lang.IllegalArgumentException : Invalid data. 不支持的类型:

php - 如何解决这个德性显示错误?

c - C 错误中的 SIGSEGV

ruby-on-rails - RVM稳定版本的安装错误

objective-c - 信号错误 : 'NSInvalidArgumentException'

java - 如何使用注释使用默认构造函数初始化字段

php - PHP AJAX错误处理

ios - 神秘的 UIActivityIndi​​catorView 错误?