Я читав багато запитань про новинку Java, finalize()і вважаю це дивним, що ніхто не зрозумів, що finalize () є ненадійним способом очищення ресурсів. Я бачив, як хтось коментує, що вони використовують це для очищення з'єднань, що насправді страшно, оскільки єдиний спосіб наблизитися до гарантії закриття з’єднання - це здійснити спробу (catch) нарешті.
Я не навчався в CS, але я вже майже десятиліття професійно програмую на Java, і ніколи не бачив, щоб хтось реалізував finalize() у виробничу систему. Це все ще не означає, що він не має свого використання, або що люди, з якими я працював, робили це правильно.
Отже, моє запитання полягає в тому, які випадки використання є для реалізації finalize() які не можна обробляти надійніше за допомогою іншого процесу чи синтаксису в мові?
Будь ласка, надайте конкретні сценарії чи свій досвід, просто повторивши текстову книгу Java, або остаточне використання не допрацьоване, як і не в цьому питанні.
finalize(). Однак код бібліотеки платформи , такий як SocketInputStream, який управляє власними ресурсами від імені абонента, робить це, щоб спробувати мінімізувати ризик витоку ресурсів (або використовує еквівалентні механізми, такі як PhantomReference, які були додані пізніше.) Тому екосистема потребує їх , хоча 99,9999% розробників ніколи не напишуть його.