Java “有什么区别?”;返回名称&引用;及;返回此.name";

Java “有什么区别?”;返回名称&引用;及;返回此.name";,java,junit,jacoco,Java,Junit,Jacoco,我正在尝试Jacco测试,我能够从名为Student的类中测试getStudentId,该类具有: public String getStudentId() { return studentId; } 当我尝试测试另一个名为Product的类时,我得到了一个错误-两者之间的唯一区别在于getX方法。Product的getName方法是: public String getName() { return this.name; } 错误信息显示: 类Product中的构造函数Pr

我正在尝试Jacco测试,我能够从名为
Student
的类中测试
getStudentId
,该类具有:

public String getStudentId() {
    return studentId;
}
当我尝试测试另一个名为
Product
的类时,我得到了一个错误-两者之间的唯一区别在于
getX
方法。
Product
getName
方法是:

public String getName() {
    return this.name;
}
错误信息显示:

类Product中的构造函数Product不能应用于给定类型


有可能将studentID设置为公共变量。无论何时使用this.whatever从getX函数返回变量,都会使用this。意味着它是一个私有变量。studentID很可能是公共的,这就是为什么在它前面没有“this.”的原因。

有可能将studentID设置为公共变量。无论何时使用this.whatever从getX函数返回变量,都会使用this。意味着它是一个私有变量。studentID很可能是公共的,这就是为什么在它前面没有“this.”的原因。

关键字
this
引用了您当前所在对象的实例。想象一下有这样一个类:

public class A {
    private String property;

    public void changeProperty(String property) {
        this.property = property
    }
}
在方法之外,变量名属性并不含糊,它引用类
A
的成员变量。但是在方法
changeProperty
中它是不明确的,因为还有名为property的参数


Java如何解决这一冲突?如果只键入
property
,您将始终引用范围较小的对象,因此方法的参数而不是成员变量。通过使用
this.property
可以再次引用成员变量

如果对象中没有此类冲突,如示例中所示,则不需要this语句,并且
this.name
name
相同


但是,为了防止非常严重的bug,在引用成员变量时,可以始终使用
this
,这与良好实践一样。假设您将来创建一个名称冲突的方法,而忘记了成员变量,哎呀,您很容易创建一个难以调试的bug

一些程序员甚至更进一步,总是给成员变量命名而不是参数,以防止这种名称冲突。例如,成员变量通常命名为:

  • m属性
  • \u属性

请注意,方法this(…)引用了自己对象的构造函数。它可以在构造函数中用于将任务传递给另一个构造函数,如:

public class A {
    public A(String fileName) {
        this(new File(fileName), true);
    }

    public A(File file) {
        this(file, true);
    }

    public A(File file, boolean doSomething) {
        // Code ...
    }
}

类似地,还有关键字
super
,它引用父类。例如:

public class A {
    protected String property;
}

public class B extends A {
    private String property;

    public void foo() {
        // Property of B
        System.out.println(property);
        // The same
        System.out.println(this.property);

        // Property of A
        System.out.println(super.property);
    }
}
该关键字还可用于引用父构造函数或父类的其他方法


因此,总的来说,它只是解决这样的名称冲突


现在我们知道了,很容易看到您发布的代码不包含bug

关键字
引用您当前所在对象的实例。想象一下有这样一个类:

public class A {
    private String property;

    public void changeProperty(String property) {
        this.property = property
    }
}
在方法之外,变量名属性并不含糊,它引用类
A
的成员变量。但是在方法
changeProperty
中它是不明确的,因为还有名为property的参数


Java如何解决这一冲突?如果只键入
property
,您将始终引用范围较小的对象,因此方法的参数而不是成员变量。通过使用
this.property
可以再次引用成员变量

如果对象中没有此类冲突,如示例中所示,则不需要this语句,并且
this.name
name
相同


但是,为了防止非常严重的bug,在引用成员变量时,可以始终使用
this
,这与良好实践一样。假设您将来创建一个名称冲突的方法,而忘记了成员变量,哎呀,您很容易创建一个难以调试的bug

一些程序员甚至更进一步,总是给成员变量命名而不是参数,以防止这种名称冲突。例如,成员变量通常命名为:

  • m属性
  • \u属性

请注意,方法this(…)引用了自己对象的构造函数。它可以在构造函数中用于将任务传递给另一个构造函数,如:

public class A {
    public A(String fileName) {
        this(new File(fileName), true);
    }

    public A(File file) {
        this(file, true);
    }

    public A(File file, boolean doSomething) {
        // Code ...
    }
}

类似地,还有关键字
super
,它引用父类。例如:

public class A {
    protected String property;
}

public class B extends A {
    private String property;

    public void foo() {
        // Property of B
        System.out.println(property);
        // The same
        System.out.println(this.property);

        // Property of A
        System.out.println(super.property);
    }
}
该关键字还可用于引用父构造函数或父类的其他方法


因此,总的来说,它只是解决这样的名称冲突


现在我们知道了,很容易看出,当您使用this.name时,您发布的代码不包含bug。但是,当您只使用名称时,它可以是代码中调用的任何变量,甚至是属性。例如:

   public String getName(){
    String name = "Mery";
    this.name = "Jacob";
    return name;
   }

此方法返回值“Mery”。如果输入return this.name,则返回值“Jacob”。

使用this.name时,您使用的是类中定义的属性,即属性名。但是,当您只使用名称时,它可以是代码中调用的任何变量,甚至是属性。例如:

   public String getName(){
    String name = "Mery";
    this.name = "Jacob";
    return name;
   }
此方法返回值“Mery”。如果您输入return this.name,那么