[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-11-25-flexible-constructor-bodies":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},416,"flexible-constructor-bodies",11,"java-11-25","Java 11–25","🆕","Flexible Constructor Bodies","Flexible Constructor Bodies (финализировано в Java 25) позволяют выполнять код до вызова `super()` или `this()` в конструкторе — валидацию аргументов, подготовку параметров, логирование. Ранее `super()`\u002F`this()` обязательно были первым оператором.\n\n```java\n\u002F\u002F До Java 25 — super() обязан быть первым\npublic class PositiveInteger extends Number {\n    public PositiveInteger(int value) {\n        \u002F\u002F if (value \u003C= 0) throw ...; \u002F\u002F НЕЛЬЗЯ до super()!\n        super();\n        if (value \u003C= 0) throw new IllegalArgumentException(\"Must be positive\");\n        this.value = value;\n    }\n}\n\n\u002F\u002F Java 25 — код до super()\npublic class PositiveInteger extends Number {\n    public PositiveInteger(int value) {\n        if (value \u003C= 0) {\n            throw new IllegalArgumentException(\"Must be positive: \" + value);\n        }\n        super(); \u002F\u002F теперь может быть не первым\n        this.value = value;\n    }\n}\n```\n\n### Практический пример — подготовка аргументов для super()\n\n```java\npublic class NamedLogger extends AbstractLogger {\n    public NamedLogger(String rawName) {\n        var cleanName = rawName.strip().toLowerCase();\n        if (cleanName.isEmpty()) {\n            throw new IllegalArgumentException(\"Name cannot be blank\");\n        }\n        super(cleanName); \u002F\u002F передаём обработанное значение\n    }\n}\n```\n\n### Ограничения кода до super()\n\n| Можно | Нельзя |\n|-------|--------|\n| Валидировать аргументы | Обращаться к `this` |\n| Подготовить параметры для super() | Вызывать instance-методы |\n| Логировать | Присваивать instance-поля |\n| Вычислять локальные переменные | Читать instance-поля |\n\n### Частые ошибки\n\n- Обращение к `this` до `super()` — ошибка компиляции; объект не инициализирован\n- Инициализация полей до `super()` — невозможно; `this.field = value` до `super()` запрещено\n\n### Как используется в 2026\n\n- Упрощает конструкторы — не нужны static factory methods для валидации перед super()\n- Особенно полезно для Records с валидацией и наследования\n\n> **На собеседовании:** объясните проблему (раньше приходилось выносить валидацию в static-методы или делать её после super()), решение (код до super()) и ограничение (нет доступа к this). Вопрос показывает, что кандидат следит за новыми версиями Java.","","middle",[15],"java-modern",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Flexible Constructor Bodies — Gymterview","Flexible Constructor Bodies (финализировано в Java 25) позволяют выполнять код до вызова `super()` или `this()` в конструкторе — валидацию аргументов, подготовк","Flexible Constructor Bodies (финализировано в Java 25) позволяют выполнять код до вызова `super()` или `this()` в констр",[15,13],"Flexible Constructor Bodies (финализировано в Java 25) позволяют выполнять код до вызова `super()` или `this()` в конструкторе — валидацию аргументов, подготовку параметров, логирование. Ранее `super()`\u002F`this()` обязательно были первым оператором.",true]