使用“这个”。在Java中的构造函数中

时间:2013-06-03 18:15:18

标签: java constructor

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

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;

5 个答案:

答案 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' keywordhttp://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html