Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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.name或name有什么区别?_Java - Fatal编程技术网

Java 在这种情况下使用this.name或name有什么区别?

Java 在这种情况下使用this.name或name有什么区别?,java,Java,写this.name=name的目的是什么?如果在getName方法上返回name而不是this.name,有什么区别吗?我想我明白了。name=姓名,但请澄清 写这个的目的是什么。name=name 我想你是说在setName里。在setName中,this.name是实例变量字段,name是setName接受的参数。因此this.name=name使用参数的值设置实例字段的值 如果我在getName方法上返回name而不是this.name,有什么区别吗 不,因为getName中的作用域中没

写this.name=name的目的是什么?如果在getName方法上返回name而不是this.name,有什么区别吗?我想我明白了。name=姓名,但请澄清

写这个的目的是什么。name=name

我想你是说在setName里。在setName中,this.name是实例变量字段,name是setName接受的参数。因此this.name=name使用参数的值设置实例字段的值

如果我在getName方法上返回name而不是this.name,有什么区别吗


不,因为getName中的作用域中没有任何name参数或局部变量,所以Java编译器知道您指的是name实例变量。即使不需要,也要始终包含它,或者在不需要时不使用它,这是一种样式选择。

这是在有阴影时完成的,您有两次声明名称变量,一次在方法中作为参数或局部变量,另一次作为类成员,在方法中,变量成员由参数变量名称阴影,因此,要访问它,您必须指定this.name,它引用成员变量名

因此,在方法名称中,变量指的是参数,而this.name指的是成员变量名称。 所以阴影问题解决了

package holinheritation2;

import java.util.Scanner;

public class Inheritation2 {

    public static void main (String args[]) {

        Animal wolf = new Animal();
        Scanner scanner = new Scanner(System.in);
        String name = scanner.next();
        wolf.setName(name);

        if (wolf.getName().equalsIgnoreCase("Kobe")) {
            System.out.println("You are a wolf called Kobe!");
        }
    }

}

package holinheritation2;

import java.util.Scanner;

public class Animal {

    private String name;
    private int age;

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

`enter code here`}
名称是指在方法中定义的局部变量名称。this.name引用类中设置的变量


这是为了使编译器能够区分具有相同名称的变量集。

如果局部变量与实例变量具有相同的名称,然后局部变量将隐藏实例变量,您必须使用此关键字才能访问隐藏的实例变量。

this.name=>实例变量,name=>接受为参数的局部变量。
private String name;

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