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() қолдану жаңа кодта қатты түрде ұсынылмайды. Ол ескірген механизм ретінде қарастырылуы керек.