18

我正在使用 Java 1.7、Eclipse 3.7 和市场上的 FindBugs 插件。这个例子就像天堂一样好:

class Application
{
  public static void main( String[] args )
  {
    System.out.println( "Bla" );
  }
}

此消息过去不存在,内部实现始终在系统中:

public final static PrintStream out = null;

所以 Findbugs 是对的,但是现在发生的消息是否发生了变化?

4

3 回答 3

15

因为在 java 6 中它看起来像这样:

public final static PrintStream out = nullPrintStream();

/**
 * The following two methods exist because in, out, and err must be
 * initialized to null.  The compiler, however, cannot be permitted to
 * inline access to them, since they are later set to more sensible values
 * by initializeSystemClass().
 */
private static PrintStream nullPrintStream() throws NullPointerException {
    if (currentTimeMillis() > 0) {
        return null;
    }
    throw new NullPointerException();
}

所以我猜他们在 java 7 中对其进行了简化,并向编译器添加了一些异常。

JVM 在本机代码中管理 out、in 和 err,所以它给出的这个错误消息是没有意义的。

于 2011-07-06T16:58:51.227 回答
11

这在 Findbugs 1.3.9 中被标记为一个错误。它已针对 Findbugs 2.0 进行了修复,并且可能会被向后移植。

于 2011-11-29T10:55:46.010 回答
3

这只发生在 openjdk 上,而不是 sun jdk。

问题是 2010 年发布的一个补丁,允许系统时间早于 1970 年。

http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-July/009869.html

于 2012-10-23T21:29:55.860 回答