инициализация члена класса Java - PullRequest
8 голосов
/ 17 сентября 2010

Мне немного стыдно спрашивать об этом, будучи программистом на Java в течение многих лет, но здесь говорится:
Есть ли разница между размещением объектов во время строительства и непосредственным образом при объявлении соответствующего поля? То есть есть ли разница между следующими двумя:

public class MyClass{
    MyObj obj=new MyObj();
}

И

public class MyClass{
    MyObj obj;
    public MyClass() {
        obj=new MyObj();
    }
}

Конечно, я предполагаю, что эти конкретные инициалы не полагаются на внешние параметры.

Ответы [ 2 ]

3 голосов
/ 17 сентября 2010

инициализация переменной экземпляра выполнена до вызова конструктора

Это не годится.
Вы можете ограничить пользователя от вызова const. если вы хотите выполнить определенную операцию до инициализации.

Лучшая практика:

  1. Не инициализировать значениями по умолчанию в объявлении (null, false, 0, 0.0 ...).
  2. Предпочитайте инициализацию в объявлении, если у вас нет параметра конструктора, который изменяет значение поля.
  3. Если значение поля изменяется из-за параметра конструктора, поместите инициализацию> в конструкторы.
  4. Будьте последовательны в своей практике. (самое важное правило)

с здесь

2 голосов
/ 17 сентября 2010

Нет, нет.За исключением того, что если вы добавите несколько конструкторов, у вас будет дублированный код.

Альтернативой является использование блока инициализации

{
   var = 1;
}

Ссылка: Инициализация полей

...