JavaRush /Курсы /Java Syntax /Финализируем с finalize

Финализируем с finalize

Java Syntax
6 уровень , 3 лекция
Открыта

— И снова привет! Сегодня будет кратенькое знакомство с методом finalize(). Этот метод вызывается Java-машиной у объекта перед тем, как объект будет уничтожен. Фактически этот метод – противоположность конструктору. В нем можно освобождать ресурсы, используемые объектом.

— Этот метод есть у класса Object и, следовательно, есть в каждом классе (все классы в Java считаются унаследованными от класса Object и содержат копию его методов). Ты можешь просто написать в твоём классе такой же метод, и он будет вызываться перед уничтожением объектов этого класса.

Пример:

Пример:
class Cat
{
    String name;

    Cat(String name)
    {
        this.name = name;
    }

    protected void finalize() throws Throwable
    {
        System.out.println(name + " destroyed");
    }
}
6
Задача
Java Syntax Pro, 6 уровень, 3 лекция
Недоступна
Reverse
Тебе нужно написать программу, которая: 1. Считывает с консоли целое число N. 2. Если считанное число N больше 0, то программа дальше считывает целые числа, количество которых равно N. 3. Вывести в консоль считанные числа, если N нечетное - в порядке ввода, иначе — в обратном порядке. Каждое число выводить с новой строки. Число N выводить не нужно.

— Понятно.

— Но! Java-машина сама решает – вызвать данный метод или нет. Чаще всего объекты, созданные в методе и объявленные мусором после его завершения, уничтожаются сразу же и без всяких вызовов метода finalize(). Этот метод скорее дополнительная страховка, чем надёжное решение. Лучшим вариантом будет освобождать любые используемые ресурсы (обнулять сохраненные ссылки на другие объекты), когда наш объект ещё жив. О пользе этого метода и нюансах его работы я расскажу тебе уровней через 10, или 20. А пока что ты должен знать две вещи: такой метод существует, и (сюрприз!) не всегда вызывается.

6
Задача
Java Syntax Pro, 6 уровень, 3 лекция
Недоступна
Минимальное из N чисел
Чтобы выполнить эту задачу, тебе нужно: 1. Ввести с клавиатуры число N. 2. Считать N целых чисел и заполнить ими массив. 3. Найти минимальное число среди элементов массива и вывести в консоль.
6
Задача
Java Syntax Pro, 6 уровень, 3 лекция
Недоступна
Максимальное из N чисел
В этой задаче тебе нужно: 1. Ввести с клавиатуры число N. 2. Считать N целых чисел и заполнить ими массив array. 3. Найти максимальное число среди элементов массива.
Комментарии (158)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Сергей Куликов Уровень 8
28 июня 2024
Для чего написано "throws Throwable" в строке finalize на примере вверху?
Даниил Уровень 14
2 февраля 2023
Меня одного подбешивает, что в примере скобки идут не сразу после создания класса, а на следующей строке?
Victor Уровень 7
17 декабря 2022
Чтобы быстро такое проходить, я про задачи, удерживая АЛЬТ, выделяем текст мышью, копируем, вставляем в решение задачи.
DimanchikS Уровень 22
17 января 2022
finalize уже с 9й версии deprecated. Лучше про него забыть и никогда не использовать. Финализация вообще во много завязана на машину, которая используется. А данный метод работает непонятно как и непонятно когда. Есть очень хороший ответ на стэковерфлоу - https://stackoverflow.com/a/56454348
Gans Electro Уровень 42
5 мая 2023
Сергей Петров Уровень 18
19 февраля 2021
такое ощущение, что лекции размазывают для подгона их количества около 12ти, поскольку конкретно вот тут - ничего нового после статьи "профессора" с прошлой лекции.
Iv@n Уровень 12
13 апреля 2021
Я думаю они просто придерживаются старой поговорки "Повторение мать учение"☺️
Aleksandr Gorohov Уровень 28
3 июня 2021
"мать учениЯ"
la flacko flame Of Cactus Уровень 8
19 августа 2021

вхавазвхахвав
YesOn Уровень 13
20 октября 2021
Дают мозгу немного расслабиться и осознать простые вещи.
Тимур Исхаков Уровень 29
16 февраля 2021
Привет с уровня 23. Скорее всего, вы забудете о существовании этого метода, как и я. Никакой практической пользы он не несет, знать о нем стоит только для быстрой идентификации плохих и устаревших решений в коде.
Сергей Петров Уровень 18
19 февраля 2021
Вы апнули 3 уровня за 3 дня ?
Тимур Исхаков Уровень 29
19 февраля 2021
Так получилось. Я параллельно прохожу квест Мультитрединг и Коллекшн, и конец уровней обеих веток пришелся на момент написания комментария.
Andrei Уровень 7
2 ноября 2021
Можно идти по обоим? Разве не нужно выбрать одну ветку?
Jim Уровень 13
7 января 2021
Ребята, я новичок, но думаю этот метод полезен хотя бы в одном: Он помогает наглядно увидеть, как работает удаление объекта. Без него эта лекция была бы намного короче и менее содержательнее. Может для кого-то из нас придет время, когда будем учить других, что мол объект должен удаляться. А так, хотя бы есть наглядность и в IDEA можно опробовать. Ведь для каких-то учеников мало будет слов «Вот мы обнулили ссылку, а объект удалит JVM. Ты не переживай, он удалиться». Но тут на помощь придет несчастный finalize() и выручит учителя заочной "прады". Но повторюсь, я новичок, и говорю это через призму "молодости" :) Не судите строго, ребята… :)
3 февраля 2021
На 22 уровне вернётесь к этой теме и методу finalize(); Общий вывод - знать о нём надо, а вот пользоваться - не надо. Это устаревший метод, которым пользуются только в очень специфичных случаях. В Java 7 появилась замена. Но пока не забивайте себе голову.
Сергей Уровень 5
29 декабря 2020
Про метод finalize() гуглите, тут мало чего рассказали, а он очень нужен!
Vaha Уровень 12
26 ноября 2020
В предыдущей лекции профессор давал ссылку. там подробно написано про finalize, в частности про его некорректную работу и , как следствие, отсутствие в нём необходимости.
17 ноября 2020
В Java Code Conventions не рекомендуют использовать finalize(); https://google.github.io/styleguide/javaguide.html#s6.4-finalizers Finalizers: not used It is extremely rare to override Object.finalize. Tip: Don't do it. If you absolutely must, first read and understand Effective Java Item 7, "Avoid Finalizers," very carefully, and then don't do it.
ivasvi Уровень 30
24 ноября 2020
Спасибо! Полезно "сходить" в эту книгу и прочитать на будущее хотя бы немного по поводу ненадежности финализаторов и очистителей.