我正在尝试Jacco测试,并且我能够从名为getStudentId
的类中测试Student
,该类具有:
public String getStudentId() {
return studentId;
}
当我尝试测试名为Product
的其他类时,我收到错误 - 两者之间的唯一区别在于getX
方法。 getName
的{{1}}方法是:
Product
并显示错误消息:
构造函数类Product中的产品不能应用于给定类型
答案 0 :(得分:2)
关键字this
引用您当前所在的对象的实例。想象一下这样的课程:
public class A {
private String property;
public void changeProperty(String property) {
this.property = property
}
}
在方法之外,变量名称属性不明确,并引用类A
的成员变量。但是方法changeProperty
中的含糊不清是因为还有名为 property 的参数。
Java 如何解决此冲突?如果只键入property
,则始终引用具有较小范围的对象,因此方法的参数而不是成员变量。通过使用this.property
,您可以再次引用成员变量。
如果您的对象中没有此类冲突(例如您的示例),那么您不需要此语句,而this.name
与name
相同。< / p>
然而,作为一个非常讨厌的错误的预防,在引用成员变量时总是可以使用this
,这也是一种很好的做法。想象一下,你将来会创建一个具有这种名称冲突的方法而忘记成员变量,哎呀你很容易创建一个难以调试的bug。
一些程序员甚至更进一步,总是给成员变量以外的名字而不是参数,以防止这种名称冲突。例如,成员变量通常命名为:
请注意,方法 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);
}
}
此关键字也可用于引用 parent-constructor 或父类的其他方法。
总而言之,只是解决此类名称冲突。
现在我们知道,很容易看到您发布的代码不包含错误。
答案 1 :(得分:1)
使用this.name时,您使用的是属性名称中定义的属性。但是,当您仅使用名称时,它可以是代码中所谓的任何变量,甚至是属性。例如:
public String getName(){
String name = "Mery";
this.name = "Jacob";
return name;
}
此方法返回值“Mery”。如果你输回this.name然后你返回值“雅各布”。
答案 2 :(得分:0)
您有可能将studentID设置为公共变量。无论何时你使用this.whatever从getX函数返回一个变量,这个。暗示它是一个私有变量。更有可能学生ID是公开的,这就是为什么你没有'这个'。在它面前。