2015-03-14 4 views
0

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

public class City { 
    private String cityName; 
    private int population; 
    private boolean goodPeopleLiveThere; 

    City() { 
     cityName = "las vegas"; 
     population = 603488; 
     goodPeopleLiveThere = true; 
    } 
} 

почему бы я инициализировать в конструкторе, а не на полях, или наоборот?

см. Двусмысленность i, как правило, я бы установил их в качестве параметров в конструкторе, а затем инициализировал их в main(), когда я создаю экземпляр класса, но затем некоторые обучающие программы, которые я видел, использовали для инициализации их, как упомянуто выше, и Я еще не полностью понял последствия инициализации в полях/конструкторе, а не в объекте.

+0

Я прочитал это сообщение раньше, хотя я не обязательно следовал логике, так как я новичок, поэтому я решил сделать один со своим кодом –

+0

. Короткий вариант заключается в том, что нет никакой реальной разницы. Более длинная версия заключается в том, что она может иметь значение, если вы выполняете наследование. – childofsoong

ответ

0

Обычно люди используют этот формат для функциональности. Возьмите, например, следующее:

private int houseNumber; 
private String houseStreet; 

public House(int houseNumber, String houseStreet) { 
    this.houseNumber = houseNumber; 
    this.houseStreet = houseStreet; 
} 

Теперь таким образом вы можете сделать что-то вроде следующего гораздо проще.

public static void main(String[] args) { 
    House randomHouse = new House(12, "Main Street"); 
    House otherHouse = new House(69, "Random Ave."); 
} 

вместо того, чтобы создавать новый класс для каждого дома.

0

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

public class City{ 
    private String cityName; 
    private int population; 
    private boolean goodPeopleLiveThere; 
    City(String city, int pop, boolean good)){ 
     cityName = city; 
     population = pop; 
     goodPeopleLiveThere = good; 
    } 
} 

Теперь, в этом примере, эти переменные зависят от значения, представленного на создании экземпляра, который не совсем редко, когда дело доходит до конструктора.

0

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

Важнейшим является то, что каждый код должен быть последовательным.

0

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

Нет «одного лучше другого» - просто разные методы с плюсами и минусами для каждого из них.

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

Смежные вопросы