java" this"关键字正确使用

时间:2015-03-02 08:22:56

标签: java this

我的构造函数中有一个使用关键字this的Fraction类:

public Fraction(int numerator, int denominator)
{
    this.numerator = numerator; 
    this.denominator = denominator; 
    adjustSigns();

    if(this.denominator == 0 )
    {
     throw new FractionException(" Undefined Fraction ");
    } 
}

我也有一个方法:

 public FractionInterface multiply(FractionInterface secondFraction)
 {
    Fraction second = (Fraction) secondFraction; 
    Fraction answer = new Fraction ((numerator * second.numerator), (denominator * second.denominator));        
    answer.reduceToLowestTerms();
    return answer; 
}

上面的方法在编译和运行时工作正常但是这个版本:

 public FractionInterface multiply(FractionInterface secondFraction)
 {
    Fraction second = (Fraction) secondFraction; 
    Fraction answer = new Fraction ((this.numerator * second.numerator), (this.denominator * second.denominator));      
    answer.reduceToLowestTerms();
    return answer; 
 }

我的问题是哪一个是正确的?如果在我的构造函数中使用“this”关键字,我还必须在我的方法中使用它吗?再次,他们都工作正常,做他们应该做的事情,但我想知道哪种方式是正确的方式。感谢。

3 个答案:

答案 0 :(得分:4)

如果要区分局部变量和同名成员,则必须明确使用this。否则,它是可选的。

您的构造函数不会将传递值分配给没有this.前缀的实例成员,因为方法参数会隐藏实例成员。如果您为参数指定不同的名称,则可以不使用this.

public Fraction(int num, int denom)
{
    numerator = num; 
    denominator = denom;
    ...
}

两个multiply版本都是相同的。

答案 1 :(得分:2)

你提到的两种情况都可以。

使用this是一种很好的做法,因为我们的英语心态更具可读性。当我们说this.some_variable时,我们会在当前类中获得some_variable的心理图像

this关键字也有助于避免变量阴影

答案 2 :(得分:1)

我认为你对“this”关键字的工作原理有点混淆。

让我举个例子:

这个

public class testing {
    private int a;
    private int b;

    testing(int a,int b){
        this.a = a;
        this.b = b;
    }
}

与:

相同
public class testing {
    private int a;
    private int b;

    testing(int x,int y){
        this.a = x;
        this.b = y;
    }
}

如果我们这样做,第二个当然更容易放到:

public class testing {
    private int a;
    private int b;

    testing(int x,int y){
        a = x;
        b = y;
    }
}