Начальное значение для переменной экземпляра в Java - PullRequest
1 голос
/ 28 января 2010

В Java, в отличие от C ++, мы можем предоставить начальное значение для поля в его объявлении:

public class BedAndBreakfast {

    public int capacity = 10;  //initialize to 10

    private boolean full = false;  //initialize to false
}

Почему возникла необходимость разрешить это, в то время как это можно сделать более четко в конструкторе?

Ответы [ 4 ]

7 голосов
/ 28 января 2010

Почему возникла необходимость разрешить это, в то время как это можно сделать более четко в конструкторе?

Это очень субъективное утверждение. Очевидно, что разработчики Java чувствовали по-другому (как я, например).

6 голосов
/ 28 января 2010

Понятнее, если вы определите значение по умолчанию с помощью свойства. Если у вас есть несколько конструкторов, вам придется определить значения в каждом конструкторе, что ужасно.

В конечном итоге компилятор помещает эти значения в каждый конструктор, поэтому итоговый результат одинаков. Это просто более читабельно и легко поддерживать таким способом.

Обновление: как BalusC отметил в своем комментарии, вы можете использовать блок инициализатора, который снова добавляется компилятором к каждому конструктору:

{ 
  var1 = 10;
  var2 = false;
}
1 голос
/ 28 января 2010

Чтобы добавить к тому, что другие опубликовали написали ... Учтите, что C ++ также позволяет указывать значения некоторых переменных в строке:

const unsigned MAX_SPEED = 85;

В Java параллель является конечной статической переменной:

static final int MAX_SPEED = 85;

Конечно, даже static final значениям переменных можно назначать отдельно от их объявлений:

static final int MAX_SPEED;

static {
  MAX_SPEED = 85;
}

Но я хочу сказать, что если в объявлении разрешены присваивания некоторых типов переменных, почему бы не разрешить все (с точки зрения языкового дизайна)?

1 голос
/ 28 января 2010

Многие считают, что так будет понятнее, значения идут вместе с декларацией.

Кроме того, порядок отличается, так как эти назначения будут выполняться до начала конструктора (конечно, кроме специальной первой строки конструктора).

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