Начал свое обучение Java с книжки Б.Еккеля Философия Ява. Добрался до метода finalize(). В книге приведен пример:
//: initialization/TerminationCondition.java
// Using finalize() to detect an object that
// hasn't been properly cleaned up.
class Book {
boolean checkedOut = false;
Book(boolean checkOut) {
checkedOut = checkOut;
}
void checkIn() {
checkedOut = false;
}
protected void finalize() {
if(checkedOut)
System.out.println("Error: checked out");
// Normally, you'll also do this:
// super.finalize(); // Call the base-class version
}
}
public class TerminationCondition {
public static void main(String[] args) {
Book novel = new Book(true);
// Proper cleanup:
novel.checkIn();
// Drop the reference, forget to clean up:
new Book(true);
// Force garbage collection & finalization:
System.gc();
}
} /* Output:
Error: checked out
*///:~
И вроде бы все понятно, но вот никак не могу уразуметь, почему в методе finalize() условие if выполняется если checkedOut==true. Ведь по умолчанию boolean являются false.
Я еще лошара в коддинге, поэтому если не правильно задаю вопрос, не могли бы вы подробно описать что конкретно делает метод finalize() в данном примере.
Спасибо!
Да, по умолчанию checkedOut
является false, но есть конструктор, который принимает значение checkedOut
. Но в Book novel = new Book(true);
и в new Book(true);
параметр - true.
Отсюда и вытекает, что в методе finalize
продолжает свою работу.
Строчка if(checkOut)
подразумевает if(checkOut == true)
Попробовал заменить boolean на int и вот что получилось. Здесь все понятно и поддается логике. Допустим false это 1, а true любой другой int:
class FinTest {
int a = 1; // false
FinTest (int a1) {
a=a1;
}
void finish() {
a=1; // false
}
protected void finalize () {
if(a!=1) // if (true)
System.out.println(a+" - Error");
}
}
public class Finalize {
public static void main(String[] args) {
FinTest x = new FinTest(2); // true
x.finish();
new FinTest(0); // true
System.gc();
}
}
Никаких вопросов в данном примере нет. Но объясните мне пожалуйста, в какой момент в оригинальном примере checkedOut принимает значение true и условие if(checkedOut) равносильно if(true)?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
int []x = new int[25]; Вопрос простой
У меня есть listview с информацией заполняемой пользователемМне нужно чтоб каждый item мог быть выбран
Есть способ загрузки cover-ов в новостной ленте: перебор массива с урлами и загрузка: