# V6090. Field 'A' is being used before it was initialized.

Анализатор обнаружил в конструкторе класса обращение к полю, которое ещё не было инициализировано.

Все поля в Java неявно инициализируются значениями по умолчанию соответствующих типов. Для ссылочных типов этим значением является 'null'.

Рассмотрим пример подобной ошибки:

    public class Test
    {
      private Object data;
      private DataProvider dataProvider;

      public Test(DataProvider provider)
      {
        this.data = dataProvider.get();
        this.dataProvider = dataProvider;
      }
    }

Здесь производится обращение к полю класса, а не параметру конструктора, из-за чего возникает 'NullPointerException' при каждом вызове этого конструктора. Исправленный вариант:

    public class Test
    {
      private Object data;
      private DataProvider dataProvider;

      public Test(DataProvider provider)
      {
        this.data = provider.get();
        this.dataProvider = provider;
      }
    }

Другой ошибкой, связанной с использованием неинициализированных ссылочных полей, является их сравнение с 'null'. В этом случае условия являются всегда истинными или всегда ложными, что показывает ошибку в построении логики программы.

    public class Test
    {
      private DataProvider dataProvider;

      public Test()
      {
        if (dataProvider != null)
        {
          dataProvider = new DataProvider();
        }
      }
    }

Анализатор не будет выдавать данное предупреждение, если поле было явно проинициализировано. В том числе, и значением 'null'.

Данная диагностика классифицируется как:

CWE-665

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6090.