Как создаётся экземпляр класса?

На первом этапе загружается сам класс, вместе со своими предками. Класс загружается всего раз, во время 1-го упоминания данного класса.

Когда загрузка закончится, начинается процесс выделения памяти под имеющиеся в нём static поля и начинают выполняться команды, прописанные в static блоках инициализации.

После этого инициализируется экземпляр. Это происходит по следующей схеме:

  • в куче создаётся ссылка на создаваемый экземпляр;
  • инициализируются нестатические поля в том же порядке, в котором они были объявлены;
  • запускается конструктор.

Поля static, объявленные у интерфейсов, не нуждаются в инициализации, что разрешает вопросы, могущие возникнуть при наследовании от нескольких предков.

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

class Parent {
  int i = callme(); // == 123
  int callme()( { return 42; }
}
class Child extends Parent {
  int callme() { return 123; }
}

От нуля до работы за 10 месяцев

Обучающая платформа AndroidSprint

Выберите трек Android, Backend или QA. Дорожная карта от основ до Junior с менторской поддержкой на каждом этапе

  • Дорожная карта: чёткий план от азов до трудоустройства — знаете, что делать дальше
  • Менторы: код-ревью на каждое задание и карьерные консультации
  • Результат: портфолио из проектов и поддержка при поиске работы
Выбрать трек →
От нуля до работы за 10 месяцев AndroidSprint — обучающая платформа
Выбрать трек →

Бесплатная диагностика с сениор разработчиком

Запишитесь на консультацию — перезвоним в рабочие часы

Или свяжитесь удобным способом

Вам также может быть интересно

Узнать подробнее
Курс AndroidSprint

Глубокое обучение Android разработке с 0 до получения оффера. Только персональная практика с гарантией получения продуктового опыта.

Курс AndroidSprint - Глубокое <strong>обучение Android разработке с 0 до получения оффера</strong>. Только персональная практика с гарантией получения продуктового опыта.
Узнать подробнее
Узнать подробнее
Практикум по Kotlin

Изучение Котлин с 0 для профессиональной разработки. Личный ментор и разбор кода задач через git-flow.

Практикум по Kotlin - Изучение Котлин <strong>с 0 для профессиональной разработки</strong>. Личный ментор и разбор кода задач через git-flow.
Узнать подробнее
Узнать подробнее
Бесплатные уроки по Kotlin разработке

Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.

Бесплатные уроки по Kotlin разработке - <span>Самостоятельное освоение базы по языку для дальнейшего развития в Android/back-end разработке или в автотестах.</span>
Узнать подробнее
Узнать подробнее
Onboarding в разработку

Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь

Onboarding в разработку - <span>Полное обучение Android разработке с нуля до получения оффера. Делаем упор на практику и обратную связь</span>
Узнать подробнее
Узнать подробнее
Обучающий Kotlin телеграм бот (с тестами)

Ваш основной инструмент для изучения основ языка. Бесплатные тесты и практика внутри.

Обучающий Kotlin телеграм бот (с тестами) - Ваш основной <span>инструмент для изучения основ языка.</span> Бесплатные тесты и практика внутри.
Узнать подробнее
Узнать подробнее
Бесплатные уроки по Android разработке

Самостоятельное обучение разработке Андроид приложений. Понятные видеоуроки с разжеванными примерами.

Бесплатные уроки  по Android разработке - Самостоятельное <span>обучение разработке Андроид приложений.</span> Понятные видеоуроки с разжеванными примерами.
Узнать подробнее
Узнать подробнее
Курс по UI/Unit тестированию

Для ручных тестировщиков, которые готовы осваивать автотесты с использованием актуального стека технологий. [в разработке]

Курс по UI/Unit тестированию - Для ручных тестировщиков, которые <span>готовы осваивать автотесты</span> с использованием актуального стека технологий. [в разработке]
Узнать подробнее
Узнать подробнее
Обучающий Android телеграм бот (с тестами)

Бесплатные теоретические тесты для самопроверки. А также информер на практических спринтах по Android.

Обучающий Android телеграм бот (с тестами) - Бесплатные <span>теоретические тесты для самопроверки.</span> А также информер на практических спринтах по Android.
Узнать подробнее
ИИ-ментор код-ревью и голосовые собесы
Открыть