Подтвердить что ты не робот

Findbugs дает "Nereference poere разыменовывает System.out", почему?

Я использую Java 1.7, Eclipse 3.7 с плагином FindBugs с рынка. Пример такой же приятный, как рай:

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

Это сообщение не было в прошлом, и внутренняя реализация всегда была в System:

public final static PrintStream out = null;

Итак, Findbugs правильно, но что-то изменило, что сообщение появилось сейчас?

4b9b3361

Ответ 1

Потому что в 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 управляет, in и err в собственном коде, поэтому это сообщение об ошибке, которое оно дает, бессмысленно.