Junior
Барои чӣ блоки finally дар забони барномасозии Java истифода мешавад?
sobes.tech AI
Ҷавоб аз AI
Блоки finally дар Java истифода мешаванд барои иҷрои коде, ки мурдан бояд иҷро шавад, новият дар он аст, ки дар ҳар ҳолат, новият дар try ё catch блоки, ё не.
Мақсадҳои асосии finally:
- Ресурсҳоро озод кардан: Бастаҳои файлҳо, шабакавӣ пайвандҳо, базаҳои додаҳо ва дигар захираҳо, ки дар
tryблок кушода шудаанд. Ин кафолат медиҳад, ки захираҳо дар ҳолати хатоҳо, боқӣ намонанд. - Тозакунӣ: Иҷрои амалҳои охирин, мисол, бекор кардани транзаксияҳо ё кушодани mutex.
- Иҷрои амалҳои ҳатмӣ: Ҳар коди, ки бояд дар охири амалиёт, новият дар он аст, иҷро шавад.
Масалан:
try {
// Код, ки метавонад истисно барорад
FileReader file = new FileReader("myfile.txt");
// ... кор бо файл
} catch (FileNotFoundException e) {
// Ҳолати истисно
System.err.println("Файл ёфт нашуд: " + e.getMessage());
} finally {
// Ин код ҳамеша иҷро мешавад
System.out.println("Иҷрои блоки finally.");
// Дар ин ҷо одатан захираҳоро мебанданд
if (file != null) { // Гумон мекунем, ки 'file' дар хориҷи try-баргардон шудааст
try {
file.close();
} catch (IOException e) {
System.err.println("Хатогӣ дар бастани файл: " + e.getMessage());
}
}
}
Маҳз дар хотир бояд дошт:
- Код дар
finallyҳатман иҷро мешавад, ҳатто агар дарtryёcatchкомандаиreturnистифода шуда бошад. - Агар дар
finallyистисно нав ба нав бардошта шавад, он ҳар гуна истисно, ки дарtryёcatchбардошта шуда буд, нобуд мекунад. - Блоки
finallyметавонад нобуд карда шавад, аммоtryбояд ё боcatch, ё боfinallyё ҳарду, ҳамроҳ бошад.