экземпляр-экземпляр, запрашивающий переменную экземпляра до создания объекта

У меня есть сомнения относительно блока экземпляра и конструкторов. Я узнал, что блок экземпляра всегда выполняется перед конструктором.

Однако, если я попытаюсь получить доступ к переменной экземпляра или даже попытаюсь использовать «это», нет никакой ошибки.
Но тогда как я могу получить доступ к переменной экземпляра, даже до создания объекта.

>  Я узнал, что блок экземпляра всегда выполняется перед конструктором. 
> 
> 

Тогда вы поняли, что ошибаетесь. Это не так. Они выполняются  *во время*  конструктора после неявного вызова super ().



Конструктор фактически не создает объект, поэтому парадокс, который вы указываете, фактически не существует. Конструктор работает только с ранее выделенным объектом.

Однако оператор  `new` , который используется для вызова конструктора, выполняет как задачу создания объекта, так и вызов конструктора на нем в одной атомной операции.

Кроме того, Java-компилятор реализует блоки экземпляров, эффективно добавляя код, содержащийся в них, каждому конструктору, поэтому они также выполняются как часть вызываемого конструктора.



Поскольку в начале жизни объекта виртуальная машина Java (JVM) выделяет достаточное количество памяти в куче для размещения переменных экземпляра объекта. Однако, когда эта память сначала выделяется, данные, содержащиеся в ней, непредсказуемы. Если бы память использовалась как есть, поведение объекта также было бы непредсказуемым. Чтобы защититься от такого сценария, Java гарантирует, что память инициализируется, по крайней мере, до предсказуемых значений по умолчанию, прежде чем она будет использоваться любым кодом.