Java “有什么区别?”;返回名称&引用;及;返回此.name";
我正在尝试Jacco测试,我能够从名为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
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,那么