Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.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
“this”操作符在java中是如何工作的?_Java - Fatal编程技术网

“this”操作符在java中是如何工作的?

“this”操作符在java中是如何工作的?,java,Java,我是java的初学者。你能告诉我这个操作符是如何将值传递给方法中的实例变量的吗 例如: public class Cricketer { private String name; public void setName(String name){ this.name = name; } } 我想知道它将如何处理。有人能解释清楚吗。这是编译器作为隐藏参数悄悄传递的,您可以使用它引用当前对象。非静态方法会自动将此消息传递给它们。您的方法setName不是静

我是java的初学者。你能告诉我这个操作符是如何将值传递给方法中的实例变量的吗

例如:

public class Cricketer {
    private String name;

    public void setName(String name){
        this.name = name;
    }
}

我想知道它将如何处理。有人能解释清楚吗。

这是编译器作为隐藏参数悄悄传递的,您可以使用它引用当前对象。非静态方法会自动将此消息传递给它们。

您的方法setName不是静态的,因此这意味着您需要调用Cricketer的实例

Cricketer c = new Cricketer();
c.setName("xyz");
因此,您的方法setName可以理解为

c.name = "xyz";

c是这样的。

如果在Cricketer中调用实例方法而不是静态方法,则需要为其指定一个对象:

Cricketer x = new Cricketer(...);

x.someMethod();
在someMethod的主体中,您可以使用它来表示调用该方法的对象,在本例中是x

类似地,在构造函数的主体中,这意味着我们刚刚创建的对象


在这里,在setName内部,this.name表示我们称之为setName的对象的name成员。通常,在对象的方法中,您可以只说name而不是this.name;这里的问题是,代码使用名称表示不同的含义,即传递给setName的字符串,并且该含义在setName正文中具有优先级。

请注意,通常不需要使用该名称访问当前对象中的字段,但是在上面的代码中还有一个名为name的参数,它隐藏了对name的非限定使用,以访问对象中的字段。使用this.name允许访问字段,尽管参数隐藏了它。

这是指向当前对象的指针。因此,this.name表示当前对象中的字段名。