Определение типа переменных / полей в конструкторе, как это делается? - PullRequest
2 голосов
/ 20 апреля 2010

Я только что посмотрел учебник по Suns Java и обнаружил кое-что, что полностью смутило меня: Учитывая следующий пример:

public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;

}

Почему типы переменных (полей?) Gear, cadence и speed не нуждаются в определении? Я бы написал это следующим образом:

public Bicycle(int startCadence, int startSpeed, int startGear) {
int gear = startGear;
int cadence = startCadence;
int speed = startSpeed;

}

Какая разница будет в действительности?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2010

Ваш код объявит локальные переменные - они будут фактически удалены, когда конструктор завершит работу. Давайте посмотрим на код с дополнительным контекстом:

// the Bicycle class has three fields
public int cadence;
public int gear;
public int speed;

// the Bicycle class has one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
    gear = startGear;
    cadence = startCadence;
    speed = startSpeed;
}

Теперь вы можете видеть объявления - они объявлены вне конструктора, потому что они поля экземпляра вместо локальных переменных. Они составляют данные для каждого экземпляра класса Bicycle.

2 голосов
/ 20 апреля 2010

Вполне вероятно, что эти поля уже были определены ранее в классе, до конструктора. Можем ли мы увидеть весь класс?

Конструкторы являются лишь частью класса и обычно не содержат инициацию переменных экземпляра. Как правило, вы увидите те, которые определены в верхней части класса.

0 голосов
/ 20 апреля 2010

Они были определены как переменные класса и становятся неявными прилагается. Для большей наглядности можно прочитать

общественный велосипед (int startCadence, int startSpeed, int startGear) { this.gear = startGear; this.cadence = startCadence; this.speed = startSpeed; }

...