Задать вопрос
@Kolos90

Почему подобная инициализация обьекта по утверждению автора книги считается корректной?

В книге "Философия Java" Брюса Эккеля утверждается следующее:
Из результата программы видно (код ниже) что ссылка w3 минует двойную инициализацию, перед вызовом конструктора и во время него. (Первый объект теряется, и со временеи его уничтожит сборщик мусора.) Поначалу это может показаться неэффективным, но такой подход гарантирует верную инициализацию - что произошло бы, если бы в классе был определен перегруженный конструктор, который не инициализировал бы ссылку w3, а она при этом не получала бы значения по умолчанию?
//: initialization/OrderOfInitialization.java
// Demonstrates initialization order.
import static net.mindview.util.Print.*;

// When the constructor is called to create a
// Window object, you'll see a message:
class Window {
  Window(int marker) { print("Window(" + marker + ")"); }
}

class House {
  Window w1 = new Window(1); // Before constructor
  Window w2 = new Window(2); // After constructor
  Window w3 = new Window(3); // At end 

  House() {
    // Show that we're in the constructor:
    print("House()");
    w3 = new Window(33); // Reinitialize w3
  }

  void f() { print("f()"); }

}

public class OrderOfInitialization {
  public static void main(String[] args) {
    House h = new House();
    h.f(); // Shows that construction is done
  }
} /* Output:
Window(1)
Window(2)
Window(3)
House()
Window(33)
f()
*///:~
  • Вопрос задан
  • 185 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя private_tm К ответам на вопрос (2)
@private_tm
JAVA dev
Смотрите предположим есть класс объект которого можно создать только с каким то начальным значением.

Вот для этого иногда и отсутствует конструктор по умолчанию.
Я думаю это имелось тут виду.
Ответ написан
Комментировать