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

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

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

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

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

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

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

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

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

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

```cpp
public class Test
{
  private DataProvider dataProvider;

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

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