Прошло не менее 5 лет с тех пор, как я работал с Java, и тогда каждый раз, когда вы хотели выделить объект, который нужно очистить (например, сокеты, дескрипторы БД), вы должны были не забыть добавить блок finally
и вызвать там метод очистки.
Напротив, в C ++ (или других языках, где время жизни объекта является детерминированным, например, Perl), разработчик класса определил бы функцию деструктора, которая выполняет очистку всякий раз, когда объект этого класса выходит из области видимости. Преимущество этого подхода состоит в том, что пользователь объекта не может забыть очистить его - деструктор вызывается автоматически, даже если выдается исключение. Этот подход называется довольно ужасным названием RAII - «Приобретение ресурсов - инициализация».
По моему опыту, выполнение действий «по пути RAII» избавило меня от многих накладных расходов, так как мне не нужно было беспокоиться о том, когда и когда произойдет освобождение ресурсов. Мы рассматриваем возможность использования Java для проекта среднего размера, и мне интересно, входит ли какое-то детерминированное разрушение в число многих новых функций, добавленных в язык с тех пор, как я в последний раз смотрел его. (Я надеюсь, что моя жалоба на то, что «Java не имеет RAII» была осуждена в этой теме , но до сих пор я не смог найти какие-либо подробности путем поиска в Google.)
Так что, если бы кто-то мог указать мне какой-нибудь вводный материал о том, как это сделать на Java, это было бы здорово!