В цьому записі буде розглянуто значення ключових слів Java – final та finally, кожне з котрих має свою мету для використання.
final
Ключове слово final в Java, використовується для оголошення сутностей, котрі не можуть бути змінені (перевизначені, успадковані), після свого оголошення. final можна застосовувати до змінних, методів та класів.
final змінні
В Java, при оголошенні final змінної, її можна ініціалізувати лише один раз. Після того як final змінній присвоєно значення, спроба його змінити призведе до помилки компіляції:
package wiki.it.notes.core.keyword_final;
public class Main {
final static int NUMBER = 5;
public static void main(String[] args) {
NUMBER = 10;
}
}Помилка:
java: cannot assign a value to final variable NUMBERЦя властивість придає final змінним схожість з константами.
final методи
final методи в Java – це методи, котрі не можуть бути перевизначені в жодному підкласі. Це може бути корисним, коли потрібно підтримувати узгоджену реалізацію методу в ієрархії класів, таким чином уникаючи непередбаченої поведінки:
public class A {
public final void message () {
System.out.println("Ok");
}
}public class B extends A {
@Override
public void message() {
System.out.println("Not Ok");
}
}В прикладі вище, спроба паревизначити final метод message, в класі спадкоємці, призведе до помилки:
java: message() in B cannot override message() in A overridden method is finalfinal класи
final клас в Java – це клас, котрий не може бути успадкований жодним іншим класом. Це застосовується для забезпечення незмінності поведінки класу, шляхом успадкування:
public final class A {
// class code
}public class B extends A {}При спробі успадкувати final клас, буде отримано помилку компіляції:
java: cannot inherit from final AТаке обмеження може бути корисним наприклад для класів, що містять критично важливу для безпеки логіку, котру не слід перевизначати.
finally
Блок finally в Java є частиною конструкції try-catch-finally, для обробки винятків. Блок finally гарантовано виконується, незалежно від того, було згенеровано виняток в блоці try, чи ні.
Використання finally корисне для звільнення ресурсів (наприклад закриття файлових потоків або з’єднань з базами даних), гарантуючи їх звільнення незалежно від результату операції. Це допомагає запобігти витокам пам’яті та неналежному використанню ресурсів.
Приклад блоку finally:
public class Main {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
System.out.println("1. Try block");
System.out.println(a/b);
} catch (Exception e) {
System.out.println("2. Catch block");
} finally {
System.out.println("3. Finally block");
}
}
}В прикладі вище я навмисно зімітував генерацію винятку ArithmeticException (виникає при діленні на 0). Як можна помітити з результату, після створення винятку в блоці try, було виконано блок catch (обробка помилки), а в завершення блок finally:
1. Try block
2. Catch block
3. Finally block Висновок
final та finally – це ключові слова в Java, котрі мають різне призначення:
- final – використовується для оголошення констант, запобігання перевизначенню методів та успадкуванню класів.
- finally – блок, котрий використовується в конструкції обробки винятків try-catch-finally, для виконання коду незалежно від генерації винятку.
Обидва ключових слова допомагають писати надійніший код на Java. Використовуючи final, можна оголошувати незмінні константи та більш передбачувані методи і класи. Блок finally полегшує управління ресурсами та їх очищення.