Sobes.tech
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 ё ҳарду, ҳамроҳ бошад.