Выделение память под поля-ссылки в конструкторе без параметров в Java

363
16 марта 2017, 20:51

Поля класса представлены объектными ссылками. Вопрос: Должен конструктор по умолчанию выделять под поля-ссылки память?

Пример:

 class A {}
 class B {
    A a;
    B() {
      a = new A ();
    }
 }
Answer 1

Обычно в java не говорят о выделении/освобождении памяти.

Если вопрос в том, нужно ли инициализировать поля члены перед использованием - да нужно.

 class A {int v = 5;}
 class B {
    A a;  // a == null
    B() {
    }
    void foo() {
      System.out.print(a.v); // Может вызывать NullPointerException
    }
    void bar() {
      if (a == null) a = new A();
      System.out.print(a.v); // ok
    }
 }
 ////
 B b = new B();
 b.foo(); // NullPointerException - b.a не инициализирована
 b.bar(); // ok
 b.foo(); // ok, ведь a уже инициализирован

На примере метода bar показал, что в конструкторе это делать необязательно.

Хорошим тоном является отсутствие в публичном интерфейсе методов, допускающих неконсистентное(использование неинициализированных переменных) состояние класса.

READ ALSO
Сертификат для KeyStore

Сертификат для KeyStore

Создаю хранилище для PrivateKeyВ строке KeyStore

330
java mongodb distinct

java mongodb distinct

1) Прямой запрос к БД выглядит так:

319
Внешняя БД и android-приложение

Внешняя БД и android-приложение

Как сделать внешнюю БД (которая будет висеть где-то на хостинге) и сделать возможность записывать/читать информацию с нее в android-приложенииЕсли...

442