finalize()
вызывается GC как раз перед тем, как уничтожить объект.Это никогда не может произойти вообще, и метод finalize()
никогда не будет вызван.
Если вы берете ресурс (то есть открываете файл), вы должны правильно вручную освободить его.Вы можете использовать AutoCloseable
интерфейс.
Пример:
try (Scanner scan = new Scanner(new File("xxx"))) {
// do smth.
} // scan.close() will be automatically called here
или более строго:
Scanner scan = null;
try {
scan = new Scanner(new File("xxx"));
} finally {
if (scan != null)
scan.close(); // instead of scan.finalize();
}
PS Никогда не использовать finalize()
Метод - это устаревший и используемый в очень специфических решениях низкого уровня.Если вы задаете этот вопрос, значит, это не ваш вопрос.