Применить finalize можно для освобождения ресурсов, которые не связаны с памятью JVM. К таким ресурсам можно отнести ресурсы операционной системы, ресурсы базы данных и т.д. Если какой либо объект занимает внешние ресурсы, то конечно их необходимо освободить, после того как объект более недостижим. А поскольку, внешние ресурсы не связаны с памятью JVM, сборщик мусора не сможет до них дотянуться и освободить. В этих случаях, для освобождения внешних ресурсов, можно применить finalize. Но если освобождение этих ресурсов критично, то использовать finalize нельзя, так как он может вообще никогда не вызваться или вызваться когда будет уже поздно.
Еще один способ применения finalize - это своего рода защита от дурака. В этом случае, он может использоваться для подстраховки пользователя класса. Например, есть некий класс, который содержит в себе следующие методы:
- метод open для получения каких нибудь внешних ресурсов;
- метод close для явного освобождения полученных ресурсов.
Для страховки в методе finalize можно проверять были ли освобождены занимаемые ресурсы.
При переопределении метода finalize, необходимо вызвать реализацию суперкласса. Если этого не сделать, то finalize суперкласса никогда не будет вызван.protected void finalize() throws Throwable {
try {
// Освобождаем необходимые ресурсы
} finally {
super.finalize();
}
Комментариев нет:
Отправить комментарий