Sobes.tech
Junior

Java-да finalize әдісі не?

sobes.tech AI

AI-дан жауап

Java-дағы finalize() әдісі — бұл Object класының қорғалған әдісі, ол жиналғыш жадты пайдалану алдында шақырылады.

Оның мақсаты — осы объектіге тән ресурстарды тазалау операцияларын орындау (мысалы, файлдар немесе желі байланыстарын жабу).

Қолдану мысалы (ескірген әдіс):

class MyResource {
    private FileInputStream file;

    public MyResource(String path) throws IOException {
        this.file = new FileInputStream(path);
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("finalize() шақырылды");
        if (file != null) {
            file.close(); // Ресурсты жабу әрекеті
        }
        super.finalize(); // ата-әдісті шақыру маңызды
    }
}

finalize() ерекшеліктері:

  • Ол шақырылатыны немесе қашан шақырылатыны кепілденбеген. Жиналғыш жад оны мүлде іске қоспауы мүмкін.
  • Оның орындалуы объекті үшін жиналғыш жадты блоктайды, әдіс аяқталғанша.
  • Егер finalize() ішінде объект қол жетімді болса, ол объектіні тірілтуі мүмкін.
  • finalize() орындалуы бөлек ағында (финализаторда) өтеді, бұл өнімділік пен параллелизм мәселелерін тудыруы мүмкін.
  • finalize() ішіндегі қате шығару еленбейді және әдістің үнсіз аяқталуына әкеледі.

Қазіргі баламалар finalize() үшін:

  • try-with-resources және AutoCloseable: Ресурстарды басқарудың ұсынылатын әдісі. Қате болған жағдайда да ресурстарды жабуды қамтамасыз етеді.

    try (FileInputStream file = new FileInputStream("path/to/file")) {
        // Файлмен жұмыс
    } catch (IOException e) {
        // Қате өңдеу
    }
    
  • Cleaner ( java.lang.ref класы): Ресурстарды тазалау операцияларын орындаудың икемді әрі бақылауға болатын әдісі, finalize()-ға сенуді тоқтатады.

Өзінің болжамсыздығы мен кемшіліктері себепті, finalize() қолдану жаңа кодта қатты түрде ұсынылмайды. Ол ескірген механизм ретінде қарастырылуы керек.