Почему нельзя инициализировать переменную не в строке объявления? Но до обращения к ней

//так выдает ошибку при инициализации
public class Hello_World {
    public int id;
    id =100;
}

//а вот так работает
public class Hello_World {
    public int id = 100;
}

Ответы (2 шт):

Автор решения: Kakius

По идеи, нужно всегда инициализировать переменную чтобы потом не вылетало исключение NullPointerException. В данном случае как написал коллега.

это просто не валидный синтакис – @Stranger in the Q

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

Не призываю Вас так делать, потому что это сугубо моё мнение)

→ Ссылка
Автор решения: Sergey Gornostaev

Это объявление переменной

public int id;

Объявление может быть с инициализацией

public int id = 100;

А это операция присваивания

id = 100;

Инициализация и присваивание - это разные синтаксические конструкции, хоть и выглядят похоже.

На уровне объявления класса возможны только другие объявления - объявления полей, методов, конструкторов и блоков инициализации. Операции могут быть только внутри блоков инициализации, конструкторов и методов.

P.S. Во время компиляции все операции инициализации нестатических полей будут автоматически перенесены в конструктор по умолчанию. Так что на уровне байткода присваивания отделены от объявлений.

→ Ссылка