Лекции 2025. Java. Белая / Ответы на билеты. Java
.pdf
Выполнение блоков инициализации экземпляра (если они есть).
Выполнение тела самого конструктора.
4. Возврат ссылки на созданный объект/массив:
После успешного выделения памяти и инициализации (включая выполнение конструктора для объектов), оператор
возвращает ссылку (адрес в памяти) на только что созданный объект или массив.
Эта ссылка обычно присваивается переменной соответствующего типа.
Примеры использования:
Создание объекта класса:
Создание массива:
Что произойдет, если память не может быть выделена?
Если в куче недостаточно свободной памяти для создания нового объекта или массива, JVM выбросит исключение
. Это критическая ошибка, которую обычно трудно обработать, и она часто приводит к завершению работы приложения.
В итоге, оператор
— это ключ к динамическому созданию объектов и управлению памятью в Java (хотя само освобождение памяти выполняется сборщиком мусора). Без
невозможно было бы создавать экземпляры
классов и работать с объектно-ориентированной парадигмой в полной мере.
34. Можно ли вызвать static-метод внутри обычного метода?
Да, можно.
Обычный (нестатический, или метод экземпляра) метод принадлежит конкретному объекту и имеет доступ ко всем членам этого объекта, а также ко всем статическим членам класса.
Почему это возможно:
Статические методы принадлежат классу, а не конкретному экземпляру. Они существуют независимо от того, созданы ли объекты класса.
Метод экземпляра выполняется в контексте конкретного объекта, но он также "знает" о классе, к которому принадлежит этот объект. Поэтому он может обращаться к статическим членам (полям и методам) этого класса.
Как это делается:
Вы можете вызвать статический метод просто по его имени (если он в том же классе) или используя имя класса (что всегда является хорошей практикой и более явно).
Пример:
Резюме:
Методы экземпляра "видят" как контекст своего объекта (
), так и контекст своего класса (статические члены). Поэтому вызов статического метода из метода экземпляра является совершенно нормальной и частой практикой.
35. Как вызвать обычный метод класса внутри static-метода?
Напрямую — нельзя.
Статический метод принадлежит классу и не связан с каким-либо конкретным экземпляром (объектом) этого класса. Обычный метод (метод экземпляра), наоборот, всегда вызывается на конкретном объекте и работает с его состоянием (полями экземпляра).
Почему нельзя напрямую:
У статического метода нет ссылки
. Он не знает, для какого объекта вызывать обычный метод. Если бы это было разрешено, какой экземпляр должен был бы использоваться? Неопределенность.
Обычные методы могут обращаться к полям экземпляра. Если вызвать обычный метод из статического контекста без объекта, то не будет полей экземпляра, с которыми этот обычный метод мог бы работать.
Как это можно сделать (косвенно):
Чтобы вызвать обычный метод из статического метода, статический метод должен
получить ссылку на конкретный экземпляр (объект) класса, на котором нужно вызвать этот обычный метод.
Это можно сделать несколькими способами:
1. Создать новый экземпляр внутри статического метода:
2. Передать экземпляр в качестве параметра статического метода:
Пример:
Резюме:
Статические методы работают на уровне класса, методы экземпляра — на уровне объекта. Чтобы из "мира классов" (статического контекста) взаимодействовать с "миром объектов" (вызвать метод экземпляра), нужна конкретная "дверь" в этот мир — ссылка на объект.
36. Для чего используется в Джава ключевое слово this?
Этот вопрос уже подробно разбирался в пункте 28. Использования this для доступа
к компонентам класса.
Кратко повторим основные моменты:
Ключевое слово
в Java — это ссылка на текущий экземпляр класса. Оно используется внутри методов экземпляра или конструкторов.
Основные случаи использования
:
1. Разрешение конфликтов имен (Variable Shadowing):
Когда параметр метода/конструктора или локальная переменная имеет то же имя, что и поле экземпляра,
используется для явного обращения к полю экземпляра.
2. Вызов другого конструктора того же класса (Constructor Chaining):
вызывается из одного конструктора для вызова другого конструктора того же класса. Должен быть первой инструкцией.
3. Передача текущего объекта в качестве аргумента в другой метод:
Когда текущий объект нужно передать как параметр другому методу.
4.Возврат текущего объекта из метода (для текучих интерфейсов / Method Chaining):
Метод возвращает
для возможности последовательного вызова других методов на том же объекте.
Важно:
нельзя использовать в
методах или
блоках инициализации, так как они не связаны с конкретным экземпляром класса.
Ключевое слово
является неотъемлемой частью объектно-ориентированного программирования в Java, позволяя методам и конструкторам ссылаться на объект, в контексте которого они выполняются.
37. Объявление и использование методов, объявленных с модификатором public static
Методы, объявленные с модификаторами
и
(часто называемые просто "статическими публичными методами"), играют важную роль в Java.
Объявление:
Синтаксис объявления такого метода:
: Модификатор доступа, означает, что метод доступен из любого другого класса в любом пакете.
: Ключевое слово, указывающее, что метод принадлежит классу, а не конкретному экземпляру объекта. Его можно вызывать без создания объекта класса.
: Тип данных, который метод возвращает (например,
,
,
если ничего не возвращает).
: Идентификатор метода.
: Типы и имена параметров, которые метод принимает (может быть пустым).
Характеристики
методов:
1.Принадлежность классу: Как и все статические методы, они принадлежат классу, а не объекту.
2.Вызов через имя класса: Наиболее правильный и распространенный способ вызова — через имя класса:
.
3.Отсутствие
: Внутри статического метода нет доступа к ключевому слову
, так как нет текущего экземпляра.
4. Доступ к членам класса:
Могут напрямую обращаться только к другим статическим членам (полям и методам) того же класса.
Не могут напрямую обращаться к членам экземпляра (нестатическим полям и методам). Для этого им нужна ссылка на конкретный объект.
5.Не могут быть переопределены (Overridden): Статические методы не участвуют в полиморфизме времени выполнения. Если подкласс определяет статический метод с той же сигнатурой, что и в суперклассе, это называется
сокрытием (hiding).
6.Глобальная доступность (из-за
): Любой код может вызвать этот метод, если класс, в котором он определен, доступен.
Использование
методов:
1. Утилитарные (вспомогательные) методы:
Методы, которые выполняют общие, независимые от состояния конкретного объекта операции. Класс
содержит множество таких методов (
,
,
). Класс
(
,
).
2. Фабричные методы (Factory Methods):
Методы, отвечающие за создание объектов. Они могут скрывать сложную логику создания или возвращать экземпляры подклассов в зависимости от условий.
3. Метод
- точка входа в приложение:
Главный метод Java-приложения всегда объявляется как 
.
: Чтобы JVM мог вызвать его извне.
