Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇语;这";关键词正确使用_Java_This - Fatal编程技术网

Java 爪哇语;这";关键词正确使用

Java 爪哇语;这";关键词正确使用,java,this,Java,This,我的构造函数中有一个使用关键字this的分数类: public Fraction(int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; adjustSigns(); if(this.denominator == 0 ) { throw new FractionException(" Undefined Fra

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

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”关键字,我是否也必须在我的方法中使用它??再说一次,他们都工作得很好,做了他们应该做的事情,但我想知道哪种方式才是正确的方式。谢谢。

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

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

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

两种
multiply
版本相同

您提到的两种情况都可以

使用
this
是一个很好的实践,因为它更具可读性,因为我们的英语思维方式,当我们说
this时。一些变量
,我们会在脑海中看到当前课堂中的一些变量


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

我认为您对“this”关键字的工作原理有点困惑

让我举个例子:

这个

同:

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;
    }
}

在构造函数(或setters)中使用
this
通常用于消除变量名称的歧义。根据
this
,两者都是正确的。这两种
multiply
实现的更大问题在于它们都在撒谎:它们声称接受任何实现
FractionInterface
的东西,但事实上它们只接受
分数
分数
子类的实例。正确的实现可以使用
FractionInterface
(或者声明类型为
Fraction
的参数)。但是在
这个
:在可选的情况下使用
这个
有两种想法:一种是学校觉得既然没有必要,就只需要额外的键入/文本,学校认为这有助于澄清问题。如果你不使用<代码>这个< /代码>,很容易认为<代码>分子> <代码>是一个函数参数或局部变量,而不是一个实例字段。.为什么演员阵容不正确??根据我的教授,如果我想将引用参数FractionInterface用作分数,我必须将其向下转换为分数。@lrod408该转换可能会引发ClassCastException,因为在转换之前,您没有验证
secondFraction
是否是分数的
实例。如果多个类实现了
细分接口
,其中一些类的转换将失败。@T.J Crowder,谢谢你的提醒。这一次,只有
Fraction
类实现了
FractionInterFace
,但这仍然是个好消息。再次感谢:)
public class testing {
    private int a;
    private int b;

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