Что нового выполняется первым - в конструкторе или вне? - PullRequest
3 голосов
/ 17 апреля 2011

Если я определю класс следующим образом:


public class myClass {
    private x = new anotherClass();
    private y;

    public myClass() {
        y = new anotherClass();
    } 
}

какая переменная получит экземпляр раньше? х или у?

И не рекомендуется ли присваивать переменную вне конструктора?

Ответы [ 3 ]

16 голосов
/ 17 апреля 2011

Порядок выполнения:

  • Конструктор суперкласса (или цепочечный конструктор для того же класса)
  • Инициализаторы переменных экземпляра (выражение, присваивающее x в вашем коде)
  • Тело конструктора (оператор, присваивающий y в вашем коде)

Раздел 12.5 спецификации языка Java содержит подробности.

Независимо от того, назначаете ли вы переменную в конструкторе или нет, зависит от вас - мне очень нравится практическое правило, согласно которому, если начальное значение не зависит от каких-либо параметров конструктора, и всегда будет одинаковымдля всех конструкторов используйте инициализатор переменной.В противном случае назначьте его в конструкторе.

0 голосов
/ 17 апреля 2011

Я рекомендую вам проверить, а не просто получить ответ от кого-то другого:

Заставить конструктор из anotherClass напечатать пропущенную строку.

public class myClass {
    private anotherClass x = new anotherClass("outside constructor");
    private anotherClass y;

    public myClass() {
        y = new anotherClass("inside constructor");
    } 
}

И тогда вы можете сказать нам!

0 голосов
/ 17 апреля 2011

Ваши переменные в вашем коде имеют нет типов, но x сначала создается перед вызовом конструктора. (Выполните нулевую проверку для x в конструкторе, чтобы узнать).

Что касается рекомендаций, это зависит от вас. Одна вещь, например в JavaBeans, поскольку я обычно не пишу открытый конструктор по умолчанию (без аргументов), я склонен инициализировать некоторые поля при объявлении (если они должны быть не нулевыми). В противном случае я создаю их экземпляр на конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...