Прошло не менее 5 лет с тех пор, как я работал с Java, и тогда, когда вы захотели выделить объект, который нужно очистить (например, сокеты, дескрипторы DB), вам пришлось не забывать добавлять блок finally
и вызовите метод очистки там.
В отличие от этого, в С++ (или на других языках, где время жизни объекта является детерминированным, например Perl), разработчик класса будет определять функцию деструктора, которая выполняет очистку, когда объект этого класса выходит за рамки. Преимущество такого подхода заключается в том, что пользователь объекта не может забыть его очистить - деструктор получает вызов автоматически, даже если выбрано исключение. Этот подход относится к довольно ужасному имени RAII - "Инициализация ресурсов".
Было моим опытом, что выполнение вещей "способом RAII" сэкономило мне много умственных накладных расходов в плане того, что вам не нужно беспокоиться о том, происходит ли и когда происходит освобождение ресурсов. Мы рассматриваем возможность использования Java для проекта среднего размера, и мне интересно, связано ли какое-то детерминированное разрушение с множеством новых функций, добавленных в этот язык, поскольку я в последний раз смотрел на него. (Я надеюсь, что моя жалоба на то, что "Java не имеет RAII", была упрекаемой в этой теме, но до сих пор я не смог найти какие-либо подробности по googling.)
Итак, если кто-то может указать мне на какой-то вводный материал о том, как это сделать на Java, это было бы здорово!