Я бы считал себя начинающим / средним в программировании; В большинстве случаев мне кажется, что я знаю, как что-то кодировать, но я точно не знаю, что с ним делает java. Иногда у меня есть поле, которое назначается в конструкторе:
public class MyClass {
public int x;
MyClass() {
x = 5;
}
}
... И, насколько я знаю, x получает значение 5 при создании нового объекта MyClass. Однако иногда я назначаю поля вне любого конструктора или функции:
public class MyClass {
public int x = 5;
public static MyOtherClass y = new MyOtherClass();
public MyClass() {
}
}
Когда именно java выполняет эти назначения? Выполняются ли они также при создании объекта MyClass или до этого? Если я ссылаюсь на переменную stati c, такую как «y»:
public class MyThirdClass {
public MyOtherClass z = MyClass.y;
}
Присваивается ли «y», когда я впервые на нее ссылаюсь, или Java уже сделал это раньше? В этом случае «y» не может быть присвоено после создания нового объекта MyClass, потому что я еще не создал для него никаких объектов. Итак, все ли эти назначения полей вне конструкторов и методов выполняются сразу при запуске программы или вместо этого назначаются при первом обращении / необходимости? Или в другой раз? Спасибо за любую информацию по этому поводу.