在不使用this
关键字的情况下编写类是否正确?我尝试了代码,然后删除了this
,但没有任何改变
public class Dog
{
String name;
public Dog(String n){this.name = n;}
public String getName(){return name;}
public String toString(){
return("Hi my name is "+ this.getName());
}
public static void main(String[] args){
Dog tuffy = new Dog("tuffy");
System.out.println(tuffy);
}
}
答案 0 :(得分:1)
如果您在类成员之前不使用此关键字,它将在编译时自动添加。因此,如果您所在的函数没有与该成员同名的参数,则无需该关键字就可以从某个函数引用该类的任何成员。但是,如果这样做,则必须使用它来引用类成员变量而不是参数。
尽管,由于代码的清晰性和可读性,即使不是必需的,程序员也经常使用this
关键字。
答案 1 :(得分:1)
任何有关用Java编写类代码的基础知识的教程(包括official ones)都将对此进行介绍,因此值得从信誉良好的来源阅读类语法和this
关键字。
在实例方法或构造函数中,this
是对当前对象的显式引用。如果省略它,则仍将首先对照当前对象检查任何成员引用。因此,这有效:
class Dog {
String name;
public Dog(String n) { name = n; }
}
因为name
是当前对象的成员。无论您使用this.name
还是name
都没有区别。
但是,类似这样的操作不会有用:
class Dog {
String name;
public Dog(String name){ name = name; }
}
所有这些操作就是获取传入的值,并将该值复制到自身上,然后在构造函数完成后立即将其丢弃。
在这种情况下,您需要使用this
来做有意义的事情:
class Dog {
String name;
public Dog(String name){ this.name = name; }
}
现在name
的值将被显式复制到名称与当前对象所拥有的相同相同的变量中。
答案 2 :(得分:0)
this
关键字避免shadowing由您在类中声明的变量完成。例如,您使用了局部变量String name
。因此请使用this
关键字以避免阴影。
public Dog(String name) {
this.name = name;
}