我已经设置了这样的构造函数:
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;
答案 0 :(得分: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 :(得分:1)
这种情况真的没关系。如果您的参数与属性
具有相同的名称,则会有所不同public VendingMachine(double itemPrice) {
this.itemPrice = itemPrice;
}
然后你需要区分哪一个是类成员,哪一个是方法范围变量。这就是this
关键字所服务的内容(您也可以使用它来调用其他类构造函数等)。
但惯例是给类属性和方法参数相同,并使用this
关键字来防止混淆。
答案 2 :(得分:1)
这里可以指定你的方式,但通常在Java中我们遵循正确的命名约定,我们通常会保留名称,以便像你的情况一样没有误解......
public VendingMachine(double itemPrice) {
currentBalance = 0;
totalCollected = 0;
this.itemPrice = itemPrice;
这里'this'指的是调用方法的对象,因此最终将收到的itemPrice分配给对象状态(变量)itemPrice。
答案 3 :(得分:0)
this.itemPrice = itemCost;
您的示例中没有实际差异。 itemPrice
已经在方法的范围内。当方法中有另一个变量声明为itemPrice
时,会出现差异。为了区分成员变量和局部变量,我们使用this
。
答案 4 :(得分:0)
请检查此链接,以便更加谨慎地使用此链接。但是在你的情况下,正如其他人评论的那样,如果构造函数args中的变量名与class的实例变量相同,它只会帮助代码更具可读性。
Java - when to use 'this' keyword 和 http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html