3

我已经像这样设置了我的构造函数:

public class VendingMachine {

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

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

我的问题是通过接受 double 的参数来设置我的构造函数有什么区别itemCost

与制作相比有什么区别:

this.itemPrice = itemCost;
4

5 回答 5

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 节):

  
类对{
    对象第一,第二;
    公共对(对象第一,对象第二){
        this.first = 第一个;
        this.second = 第二;
    }
}

这里,构造函数采用与要初始化的字段同名的参数。这比必须为参数发明不同的名称更简单,并且在这种风格化的上下文中不会太混乱。然而,一般来说,将局部变量与字段同名被认为是一种糟糕的风格。

于 2013-06-03T18:17:38.577 回答
1

这种情况下真的无所谓。如果您的参数具有与属性相同的名称,那将会有所不同

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

然后你需要区分哪一个是类成员,哪一个是方法范围变量。所以这就是this关键字的作用(你也可以用它来调用其他类的构造函数等等)。

但是约定是给类属性和方法参数一样的,并使用this关键字来防止混淆。

于 2013-06-03T18:17:21.427 回答
1

在这里可以分配您所做的方式,但通常在 Java 中,我们遵循适当的命名约定,我们通常保留名称,以免出现像您的情况那样的误解......

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

这里的“this”是指调用方法的对象,因此最终接收到的 itemPrice 将分配给对象 state(variable) itemPrice。

于 2013-06-03T18:21:04.677 回答
0
this.itemPrice = itemCost;

您的示例中没有实际区别。itemPrice已经在方法的范围内。当方法中声明了另一个变量时,差异就出现itemPrice了。为了区分成员变量和局部变量,我们使用this.

于 2013-06-03T18:17:55.240 回答
0

请查看此链接以了解更多有关此功能的使用情况。但是在您的情况下,正如其他人所评论的那样,如果构造函数 args 中的变量名称与类的实例变量相同,它只会帮助代码更具可读性。

Java - 何时使用“this”关键字http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html

于 2013-06-03T18:27:12.303 回答