Яка різниця між деструктором і фіналізатором?
Завершення відбувається недетерміновано, на розсуд збирача сміття, і може ніколи не відбутися. Це відрізняється від деструкторів, які викликаються детерміновано, як тільки об’єкт більше не використовується, і викликаються завжди, за винятком випадків неконтрольованого завершення програми.
Використовуються фіналізатори (історично їх називають деструкторами). щоб виконати будь-яке необхідне остаточне очищення, коли примірник класу збирається збирачем сміття. У більшості випадків ви можете уникнути написання фіналізатора за допомогою системи. Час виконання.
Основна відмінність між методом finalize() і destructor() у C++ полягає в тому, що destructor() завжди викликається, коли об’єкт виходить за межі видимості, але в Java метод finalize() викликається збирачем сміття епізодично перед тим, як збирач сміття звільнить об’єкти, якщо немає посилання до того, що об’єкти існують.
Різниця між методом утилізації та фіналізації утримується об'єктом до того, як цей об'єкт буде знищено. Явно, він викликається кодом користувача, і клас, який реалізує метод видалення, повинен мати реалізований інтерфейс IDisposable. Внутрішньо він викликається Garbage Collector і не може бути викликаний кодом користувача.
Ключові слова final, finally і finalize використовуються під час обробки винятків у Java. Кожен із цих термінів служить певній меті. Основна відмінність між final, finally і finalize полягає в тому final — це модифікатор доступу, finally — блок обробки винятків, finalize — це функція класу об’єктів.
У загальному користуванні, деструктор — це метод, який детерміновано викликається при знищенні об’єкта, а архетип — деструктори C++; у той час як фіналізатор викликається недетерміновано збирачем сміття, а архетипом є методи фіналізації Java.