293 прочтения · 1 год назад
Java. Каков порядок вызова конструкторов и блоков инициализации с учётом иерархии классов?
В Java порядок вызова конструкторов и блоков инициализации в классе и его иерархии определяется следующим образом: Parent static block(s) → Child static block(s) → Grandchild static block(s) → Parent non-static block(s) → Parent constructor → → Child non-static block(s) → Child constructor → → Grandchild non-static block(s) → Grandchild constructor Например, рассмотрим следующий код: class Base { static { System.out.println("Статический блок инициализации базового класса"); } Base() { System...
268 прочтений · 3 месяца назад
От C к C++: Оператор new и всякие-разные конструкторы
В предыдущей части я был приятно удивлён тем, что для создания экземпляра класса на стеке не требуется оператор new, как в других языках: Всё происходит как обычное объявление переменной нужного типа, и объект уже создан (на стеке), и даже вызван его конструктор. На третий день Зоркий Глаз увидел, что в C++ всё-таки используется new: MyClass* test = new MyClass(); Можно писать new MyСlass со скобками или без скобок, но про это позже. А пока про new. На деле оператор new выделяет память под объект из кучи...