2013-06-03 4 views
3

Я поставил свой конструктор так:Использование «этого». в конструкторе в Java

public class VendingMachine { 

    private double currentBalance; 
    private double itemPrice; 
    private double totalCollected; 

    public VendingMachine(double itemCost) { 
     currentBalance = 0; 
     totalCollected = 0; 
     itemPrice = itemCost; 
    } 
    ... 
} 

Мой вопрос: что есть отличие от настройки моего конструктора, как и выше, принимая в качестве аргумента двойной itemCost.

Какая разница, в отличие от решений его:

this.itemPrice = itemCost; 
+3

В вашем случае нет никакой разницы. Если атрибут имеет то же имя, что и параметр конструктора, вам нужно 'this.var = var;' – jlordo

+0

См. Также: http://stackoverflow.com/q/957502/5812 –

ответ

5

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

public VendingMachine(double itemPrice) { // notice the name change here 
    itemPrice = itemPrice;   // has no effect 
    this.itemPrice = itemPrice; // correct way to do it 
} 

От JLS §6.4.1:

Ключевое слово this также может быть использован для доступ к теневому полю x, используя форму this.x. Действительно, эта идиома, как правило, появляется в конструкторах (§8.8):

 
class Pair { 
    Object first, second; 
    public Pair(Object first, Object second) { 
     this.first = first; 
     this.second = second; 
    } 
} 

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

1

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

public VendingMachine(double itemPrice) { 
    this.itemPrice = itemPrice; 
} 

Затем вам нужно будет, чтобы определить, какой из них является членом класса и который один является переменным методом области видимости. Итак, для этого служит ключевое слово this (вы также можете использовать его для вызова других конструкторов классов и т. Д.).

Но соглашение должно указывать атрибуты класса и параметры метода одинаково и использовать ключевое слово this для предотвращения путаницы.

0
this.itemPrice = itemCost; 

Там нет фактической разницы в вашем примере. itemPrice уже находится в рамках метода. Разница возникает, когда в методе есть другая переменная, объявленная itemPrice. Чтобы различать переменную-член и локальную переменную, мы используем this.

1

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

public VendingMachine(double itemPrice) { 
currentBalance = 0; 
totalCollected = 0; 
this.itemPrice = itemPrice; 

здесь «this» относится к объекту, по которому вызван метод, поэтому в конечном итоге полученная itemPrice будет назначена объекту state (variable) itemPrice.

0

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

Java - when to use 'this' keyword и http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

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