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

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

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

3
nl ja de
Вопрос основан на ложной посылке.
добавлено автор EJP, источник
@PatriciaShanahan .. Да, не все здесь важно. Но может быть, OP может почувствовать важность моих слов, а затем хорошо читать. Он поймет, что происходит за сценой.
добавлено автор Rohit Jain, источник
Чтение @RohitJain рекомендует не тривиально, но хорошо стоит усилий.
добавлено автор Patricia Shanahan, источник

3 ответы

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

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

2
добавлено

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

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

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

1
добавлено

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

1
добавлено
Не отвечает на вопрос.
добавлено автор EJP, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async