Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Java中的“this”操作符感到困惑_Java_This_Operator Keyword - Fatal编程技术网

对Java中的“this”操作符感到困惑

对Java中的“this”操作符感到困惑,java,this,operator-keyword,Java,This,Operator Keyword,虽然我试图理解为什么需要这样做,但我对它的用途感到非常困惑。例如,我编写了以下代码: 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());

虽然我试图理解为什么需要这样做,但我对它的用途感到非常困惑。例如,我编写了以下代码:

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);
}

}
为什么我需要编写这个。z=zz 当我还可以写的时候,z=zz?

也有同样的效果。如果存在重写类的字段的局部变量,则需要这样做;然后得到局部变量,而不是类字段

另外一个优点是,您可以更好地指示变量。如果有这方面的问题;这是一个领域;否则为局部变量。

它具有相同的效果。如果存在重写类的字段的局部变量,则需要这样做;然后得到局部变量,而不是类字段


另外一个优点是,您可以更好地指示变量。如果有这方面的问题;这是一个领域;否则为局部变量。

“this”运算符只是细化属于您正在使用的类的属性/字段。例如,当您有两个同名的变量时,它很有用:

this.zz = zz;

“this”运算符只是细化您正在使用的类所属的属性/字段。例如,当您有两个同名的变量时,它很有用:

this.zz = zz;

在这种情况下,你不需要。只有当您必须消除歧义时才需要它,例如当参数和实例变量共享一个名称时

有些人更喜欢用它来消除概念上的歧义,并明确表示代码引用了实例变量


另一方面,返回值周围的括号是不必要的,而且有点嘈杂。在这种情况下,您不需要。只有当您必须消除歧义时才需要它,例如当参数和实例变量共享一个名称时

有些人更喜欢用它来消除概念上的歧义,并明确表示代码引用了实例变量


另一方面,返回值周围的括号是不必要的,而且有点嘈杂。在SandboxClass1构造函数中,有两对变量,分别称为x和y。在对象本身的私有intx=1上声明了x和y,单独的x和y是构造函数intx的参数

局部参数变量会对类变量进行阴影处理。所以如果在构造函数中你刚刚做了

x = x;
这项任务将不起作用

关键字this是对调用方法/构造函数的对象的引用。在声明中

this.x = x;
您正在使用它在类级别分配给另一个x。通过限定名称,您可以区分它们

没有必要在z/zz赋值中使用此选项,因为它们有不同的名称


在getX/Y/Z方法中也不需要它,因为这些方法中没有隐藏相关类变量的局部变量。不过这并没有什么坏处。

在SandboxClass1构造函数中,有两对变量,分别称为x和y。在对象本身的私有intx=1上声明了x和y,单独的x和y是构造函数intx的参数

局部参数变量会对类变量进行阴影处理。所以如果在构造函数中你刚刚做了

x = x;
这项任务将不起作用

关键字this是对调用方法/构造函数的对象的引用。在声明中

this.x = x;
您正在使用它在类级别分配给另一个x。通过限定名称,您可以区分它们

没有必要在z/zz赋值中使用此选项,因为它们有不同的名称

在getX/Y/Z方法中也不需要它,因为这些方法中没有隐藏相关类变量的局部变量。不过这并没有什么坏处。

在SandboxClass1构造函数中,两个参数x和y隐藏了类变量,因为它们的名称相同。如果要在code>SandboxClass1构造函数中将类变量x分配给任何值,则必须使用此.x来处理它,以告诉编译器我要分配名为x的类作用域变量,而不是名为x的方法作用域变量。这同样适用于y

由于参数z不隐藏名为zz的类作用域变量,因此无需告诉编译器zz变量的作用域,类作用域zz是唯一可识别的变量,因此它是被赋值的变量。

在SandboxClass1构造函数中,参数x和y中的两个隐藏了类变量,因为它们的名称相同。如果要在code>SandboxClass1构造函数中将类变量x分配给任何值,则必须使用此.x来处理它,以告诉编译器我要分配名为x的类作用域变量,而不是名为x的方法作用域变量。这同样适用于y


由于参数z不隐藏名为zz的类作用域变量,因此无需告诉编译器zz变量的作用域,类作用域zz是唯一可识别的变量,因此它是被分配的变量。

与Objective-C不同,例如 当方法或变量是本地的,并且没有其他冲突使用相同名称时,是可选的

但是,它在名称冲突的情况下非常有用,例如在设置实例变量(如void setOnOnOnCount OnOnOnOnOnCount)的方法中,您希望将OnOnCount用作形式参数,但仍将OnOnOnCount用作实例变量名。在这种情况下,您可以这样做;每个人都很高兴,我想,除了那些在花生画廊反对这种技术的人


当然,在需要将当前对象的引用传递给其他类的情况下,这也是绝对必要的。

与Objective-C不同,如果方法或变量是局部的,并且没有其他冲突使用相同的名称,这是可选的

但是,它在名称冲突的情况下非常有用,例如在设置实例变量(如void setOnOnOnCount OnOnOnOnOnCount)的方法中,您希望将OnOnCount用作形式参数,但仍将OnOnOnCount用作实例变量名。在这种情况下,您可以这样做;每个人都很高兴,我想,除了那些在花生画廊反对这种技术的人


当然,在需要将对当前对象的引用传递给其他类的情况下,这也是绝对必要的。

关键字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的变量。一个是类属性,一个是方法参数。

关键字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的变量。一个是类属性,一个是方法参数。

嘿,这是用来提供调用对象的引用。也就是说,假设你的类是box,那么如果你想提供它的对象,那么你可以使用这个关键字在类框中提供它

class Box {
    int x;
    public Box(int x){
        this.x = x;
    }
}
在这种情况下,如果对象是ob,即Box ob=new Box1,那么它的引用将传递给对象本身。 注意:不能在类外使用此关键字。如果您使用so,那么它将提供另一个类的引用。 有关此关键字的完整详细信息,请参阅以下链接

嘿,这是用来提供调用对象的引用。也就是说,假设你的类是box,那么如果你想提供它的对象,那么你可以使用这个关键字在类框中提供它

class Box {
    int x;
    public Box(int x){
        this.x = x;
    }
}
在这种情况下,如果对象是ob,即Box ob=new Box1,那么它的引用将传递给对象本身。 注意:不能在类外使用此关键字。如果您使用so,那么它将提供另一个类的引用。 有关此关键字的完整详细信息,请参阅以下链接

对于z和zz,你不应该需要它。在非强制性的地方使用它,比如在你的getter中,只是一个编码风格的问题。对于z和zz,你不应该需要它。在非强制性的地方使用它,比如在getter中,只是一个编码风格的问题。示例中的任何内容都不属于类级别;也就是说,没有一个示例变量是类变量。示例中的变量是实例变量,而不是类变量;也就是说,没有一个示例变量是类变量。示例中的变量是实例变量,而不是类变量。