Встречается на собеседованиях • сегодня
В чём разница между final vs. finally vs. finalize
Модификатор final:
- Класс не может иметь наследников;
- Метод не может быть переопределен в классах наследниках;
- Поле не может изменить свое значение после инициализации;
- Локальные переменные не могут быть изменены после присвоения им значения;
- Параметры методов не могут изменять своё значение внутри метода.
Оператор finally гарантирует, что определенный в нём участок кода будет выполнен независимо от того, какие исключения были возбуждены и перехвачены в блоке try-catch.
Метод finalize() вызывается перед тем как сборщик мусора будет проводить удаление объекта.
Пример:
text
public class MainClass {
public static void main(String args[]) {
TestClass a = new TestClass();
System.out.println("result of a.a() is " + a.a());
a = null;
System.gc(); // Принудительно зовём сборщик мусора
a = new TestClass();
System.out.println("result of a.a() is " + a.a());
System.out.println("!!! done");
}
}text
public class TestClass {
public int a() {
try {
System.out.println("!!! a() called");
throw new Exception("");
} catch (Exception e) {
System.out.println("!!! Exception in a()");
return 2;
} finally {
System.out.println("!!! finally in a() ");
}
}
@Override
protected void finalize() throws Throwable {
System.out.println("!!! finalize() called");
super.finalize();
}
}Результат выполнения:
text
!!! a() called
!!! Exception in a()
!!! finally in a()
result of a.a() is 2
!!! a() called
!!! Exception in a()
!!! finally in a()
!!! finalize() called
result of a.a() is 2
!!! done
Oct. 21, 2023, Источник
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы
