TGViewer
Java | Вопросы собесов Java | Вопросы собесов @easy_java_ru · 11.3K subscribers
Post #113 5.6K
Что такое finalize ?
Спросят с вероятностью 12%

Метод finalize() — это метод, определённый в классе Object, который вызывается сборщиком мусора перед тем, как объект будет уничтожен. Этот метод предоставляется как средство для выполнения любой необходимой финализации, например, освобождения ресурсов (таких как закрытие файлов или соединений с базами данных), которые не управляются сборщиком мусора Java.

Особенности:

✅Не гарантируется вызов: Вызов его не гарантирован. JVM делает попытку вызвать finalize() на объекте перед уничтожением, но время вызова, а иногда и сам факт вызова, может быть неопределённым.
✅Может привести к задержкам: Использование его может существенно снизить производительность сборки мусора, поскольку требует выполнения дополнительных шагов перед уничтожением объекта.
✅Возможность "воскрешения" объекта: В теле метода его можно теоретически "воскресить" объект, сделав его снова достижимым, например, присвоив его ссылку статическому члену. Однако это практика считается крайне нежелательной и может привести к непредсказуемому поведению программы.

Рекомендации:

Из-за указанных выше недостатков и неопределённости использование finalize() не рекомендуется начиная с Java 9. Вместо этого рекомендуется использовать другие механизмы управления ресурсами, такие как:

✅try-with-resources для автоматического закрытия ресурсов, которые реализуют интерфейс AutoCloseable.
✅Определение явных методов очистки ресурсов в классах, что даёт больший контроль над процессом освобождения ресурсов.

Пример:

Ниже представлен пример класса с переопределённым методом finalize(). Однако помните, что это пример для иллюстрации, и использование его на практике не рекомендуется.
public class ExampleClass {

@Override
protected void finalize() throws Throwable {
try {
// Освобождение ресурсов или другая финализация
System.out.println("Финализация ресурсов объекта");
} finally {
super.finalize();
}
}

public static void main(String[] args) {
ExampleClass obj = new ExampleClass();
obj = null;

// Подсказка JVM выполнить сборку мусора
System.gc();

System.out.println("Главный метод завершён");
}
}


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

Метод finalize() был частью ранних версий Java, но его использование не рекомендуется из-за неопределённости поведения и потенциального вреда для производительности приложения. Рекомендуется использовать современные и более предсказуемые подходы к управлению ресурсами.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
  • 👍 14
  • ❤ 2
More from @easy_java_ru
  1. Oct 12, 2026🤔 Жизненный цикл сервлетов? 1. Загрузка и инициализация (init); 2. Обработка запроса (ser…
  2. Oct 12, 2026🤔 Как остановить поток? Остановить поток в Java можно несколькими способами, но важно пом…
  3. Oct 11, 2026🤔 Какой класс позволяет читать данные из входного байтового потока в формате примитивных…
  4. Oct 11, 2026🤔 Чем отличается where от having ? WHERE и HAVING используются для фильтрации записей, но…
  5. Oct 10, 2026🤔 На основании какой структуры данных реализован ArrayList? ArrayList реализован на базе…
  6. Oct 9, 2026🤔 Что такое «HTML»? HTML (HyperText Markup Language) — это язык разметки, используемый дл…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →