虽然我试图理解为什么需要“这个”,但我对它的目的非常困惑。例如,我编写了以下代码:
public static void main (String args[])
{
SandboxClass1 temp = new SandboxClass1(1,2,3);
System.out.println(temp.getX());
System.out.println(temp.getY());
System.out.println(temp.getZ());
System.out.println("----------------------------");
SandboxClass1 temp2 = new SandboxClass1(4,5,6);
System.out.println(temp2.getX());
System.out.println(temp2.getY());
System.out.println(temp2.getZ());
}
public class SandboxClass1
{
private int x = 1;
private int y = 1;
private int z = 0;
public SandboxClass1(int x, int y, int zz)
{
this.x = x;
this.y = y;
z = zz;
}
public int getX()
{
return(this.x);
}
public int getY()
{
return(this.y);
}
public int getZ()
{
return(this.z);
}
}
为什么我需要编码“this.z = zz”
当我还能写,“z = zz”?
答案 0 :(得分:3)
在这种情况下,你没有。当你必须消除歧义时,它只是 required ,就像参数和实例变量共享一个名字一样。
有些人喜欢使用“this”来消除概念歧义,并明确声明代码引用了一个实例变量。
(侧面说明,返回值周围的括号是不必要的,有点吵,IMO。)
答案 1 :(得分:2)
它具有相同的效果。如果有一个局部变量覆盖了该类的一个字段,则需要this
;然后你得到局部变量而不是类字段。
您可以更好地指出变量的另一个优势。如果有this
;这是一个领域;否则是局部变量。
答案 2 :(得分:2)
在SandboxClass1构造函数中,您有两对变量,分别称为x和y。在对象本身上声明了x和y(“private int x = 1”),以及作为构造函数参数的单独的x和y(“int x”)。
本地(参数)变量阴影类变量。所以,如果你刚刚在构造函数中做了
x = x;
任务无效。
关键字this
是对调用方法/构造函数的对象的引用。在声明中
this.x = x;
您正在使用它在类级别分配给其他x。通过限定名称,您可以区分它们。
没有必要将this
与z / zz赋值一起使用,因为它们具有不同的名称。
在getX / Y / Z方法中也没有必要,因为这些方法中没有局部变量会影响相关的类变量。它没有坏处。
答案 3 :(得分:2)
在SandboxClass1
构造函数中,两个参数(x
和y
)隐藏了类变量,因为它们的名称相同。如果要在代码> SandboxClass1构造函数中将类变量x分配给任何值,则必须使用this.x
来解决它,以告诉编译器“我想要分配名为x的类范围变量,而不是方法范围变量名为x“。这同样适用于y。
由于参数z
没有隐藏名为zz
的类范围变量,因此您无需告诉编译器zz变量的范围,类范围zz是唯一可识别的变量,因此是被分配的那个。
答案 4 :(得分:2)
关键字this用于引用类中的属性。创建关键字this是为了区分类属性和方法参数。像这样:
public class human
{
public void setName(String name)
{
// the first name is a reference to the class attribute name
this.name = name;
// the second name is a reference to the method parameter name
}
// definition of the class attribute name
private String name;
}
当你使用关键字this时,它引用了类中的name变量,这是一个你不需要使用它的例子:
public class Human
{
public void setName(String myName)
{
name = myName
}
private String name;
}
现在看到只有一个名为name的变量,并且只有一个名为myName的变量。在另一个例子中,有两个名为name的变量。一个是类属性,一个是方法参数。
答案 5 :(得分:1)
'this'运算符只是改进了属性/字段属于你正在使用的类。例如,当你有两个同名的变量时,这很有用:
this.zz = zz;
答案 6 :(得分:1)
与Objective-C不同,当方法或变量是本地的时,“this”是可选的,并且没有其他相同名称的冲突使用。
它在冲突名称的情况下派上用场,例如在设置实例变量的方法中,例如void setOnionCount(int onionCount)
,你想在其中使用“onionCount”作为形式参数,但仍然将“onionCount”作为实例变量名称。在这种情况下,你可以做this.onionCount = onionCount;
,每个人都很高兴(除了,我想,花生画廊里的人会反对这种技巧)。
当你需要将对当前对象的引用传递给其他类时,“this”也是绝对必要的。
答案 7 :(得分:1)
this
关键字在类框中提供它。
class Box {
int x;
public Box(int x){
this.x = x;
}
}
在这种情况下,如果你的对象是ob(即Box ob = new Box(1)
),那么引用它将被传递给它自己。
注意:您不能在课外使用此关键字。如果你使用那么它将提供另一个类的参考。
有关此关键字的完整详细信息,请参阅以下链
http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html