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