可能重复:
我什么时候应该在课堂上使用“this”?
在引用实例的字段时,如何知道是否使用“this”?
例如:
return this.name
我被教导了一个有用的案例。即当输入参数与字段名称相同时:
public void setName(String name) {
this.name = name;
}
除此之外,“这个”似乎不需要..还有哪些其他情况?
可能重复:
我什么时候应该在课堂上使用“this”?
在引用实例的字段时,如何知道是否使用“this”?
例如:
return this.name
我被教导了一个有用的案例。即当输入参数与字段名称相同时:
public void setName(String name) {
this.name = name;
}
除此之外,“这个”似乎不需要..还有哪些其他情况?
当一个类的构造函数太多时,可以使用this调用其他构造函数。例子 :
public class TeleScopePattern {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
public TeleScopePattern(int servingSize, int servings) {
this(servingSize, servings, 0);
}
public TeleScopePattern(int servingSize, int servings, int calories) {
this(servingSize, servings, calories, 0);
}
public TeleScopePattern(int servingSize, int servings, int calories, int fat) {
this.servingSize = servingSize;
this.servings = servings;
this.calories = calories;
this.fat = fat;
}
}
您必须在以下几种情况下使用它:
当您具有相同名称的字段和方法参数/局部变量并且您想要读取/写入该字段时
当您想从内部类访问外部类的字段时:
class Outer {
private String foo;
class Inner {
public void bar() {
System.out.println(Outer.this.foo);
}
}
}
this(arg1, arg2);
所有其他用法只是风格问题。
Fluent Interface 模式本质上意味着从this
“setter”方法返回,允许您“链接”方法调用。
StringBuilder
是 JDK 中具有流畅界面的一个示例。以下是它的工作原理:
int count = 5;
StringBuilder sb = new StringBuilder();
String result = sb.append("The total is ").append(count).append(".").toString();
上面的最后一行相当于:
sb.append("The total is ");
sb.append(count);
sb.append(".");
String result = sb.toString();
但导致代码更少,并且可以说更具可读性。
各种append()
方法的实现都返回this
。
除了这种情况(这很常见,我更喜欢以不同的方式命名变量和参数,以便更好地区分它们)以及将其用作构造函数,还有另一种情况。
有时您想将非常实例化的对象传递给方法。在这种情况下,您可以将此用作接收该实例的类的方法的参数。例如,有一个带有辅助类的方法,该类会增加:
public class MyClass {
private Integer value = 0; //Assume this has setters and getters
public void incrementValue() {
Incrementer.addOne(this);
}
}
而 incrementer 类有一个像这样的方法:
public static void addOne(MyClass classToIncrement) {
Integer currentValue = classToIncrement.getValue();
currentValue++;
classToIncrement.setValue(currentValue);
}
有关更多信息,请查看文档。
在大多数情况下,当从类中引用方法或属性时,这是不必要的。然而,它通过明确变量存储在类范围而不是函数范围中来提高可读性。
“在实例方法或构造函数中,this
是对当前对象的引用——正在调用其方法或构造函数的对象。您可以使用 . 从实例方法或构造函数中引用当前对象的任何成员this
。”
我不知道是谁这样教你的,但据我所知,这是对当前对象的引用。
returnType method(dataType val){
dataType myVariable = someOperation(this.val);
return myVariable;
}
docs.oracle.com详细说明了它。