Java 用这个。在爪哇
我知道这两个代码块都可以工作,但当我试图理解“this”的用法时,如果您能解释一下为什么Vehicle1类比Vehicle2类“更好”,我将非常感激。 提前多谢Java 用这个。在爪哇,java,this,Java,This,我知道这两个代码块都可以工作,但当我试图理解“this”的用法时,如果您能解释一下为什么Vehicle1类比Vehicle2类“更好”,我将非常感激。 提前多谢 public class Vehicle1 { private String color; Vehicle(String c) { this.setVehicle(c); } Vehicle() { this.setVehicle("Red");; } public void setVehicl
public class Vehicle1 {
private String color;
Vehicle(String c) {
this.setVehicle(c);
}
Vehicle() {
this.setVehicle("Red");;
}
public void setVehicle(String c) {
this.color = c;
}
public String getVehicle() {
return color;
}
}
public class Vehicle2 {
private String color;
Vehicle(String c) {
color = c;
}
Vehicle() {
color = "Red";
}
public String getVehicle() {
return color;
}
}
车辆1更好,因为它消除了任何歧义或混淆。在vehicle 2中,如果方法中有另一个“color”变量,那么您将处理该局部变量,而不是汽车本身的颜色。这主要是一个偏好问题,但使用
此
的一个优点是它避免了与更多局部变量的命名冲突。例如,如果您想让调用构造函数的人知道它的参数应该是颜色,您可能希望将其命名为:
Vehicle(String color) {
color = color; // This doesn't set the field.
}
上面的代码显示,在不使用this
的情况下,字段名color
现在被本地参数名篡夺。根据您的设置,您可能会收到一些编译器警告,但可能会忽略该错误
如果您使用此。
,则一切都将继续工作,无需进行任何其他更改:
Vehicle(String color) {
this.color = color;
}
如果局部变量或方法参数可能会隐藏类属性,我们将使用
此
。
它指出这个特定的引用将在类属性中找到
例如:
当方法/本地属性与实例属性相同时,可以看到主要区别:
此代码完全按照我们的预期执行,将值指定给color
属性:
public void setVehicle(String c) {
this.color = c;
}
所以在这里这个
是不必要的,因为方法参数名称不影响属性颜色
但如果我们使用与属性名相同的参数名:
public void setVehicle(String color) {
color = color;
}
然后,它将意味着将方法参数color
分配给它自己,这没有意义
因此,如果我们想设置一个新的属性值,我们需要使用
this
,以便告诉编译器color
是一个实例属性,而不是局部变量。第二个版本实际上更好。但这与这个的使用无关。构造函数不应该调用可重写的方法。为什么要命名setVehicle()/getVehicle()方法来设置和获取颜色。为什么不设置setColor()/getColor()?这是当前对象的引用。您可以使用this
对最终变量(您不能分配它)执行所有您可以执行的操作,并且(作为构造函数中的第一个语句)调用另一个构造函数。这。
作为方法前缀是完全没有用的。你的构造器没有链式。您已将分号加倍。第一个示例从构造函数调用可重写的方法。构造函数不是公共的。这两个例子都是废话。这个答案是错误的。在第一个例子中没有歧义,所以不能减少。模糊度不能小于零。