什么是 this?this 代表一个对象本身。
换句话说,只有在对象中运行的代码才能使用 this。什么是在对象中运行的代码?就是所有的非静态的方法和成员。例如:
public class Person {
public String name;
public String toString() {
return this.name;
}
}
因为 toString() 方法不是静态的,所以它可以使用 this 关键字。
基本上,this 关键字都可以省略 ;但是当存在同名的本地变量(参数也是本地变量)的时候,Java 就会优先取本地变量:
public class Person {
public String name;
public String toString() {
String name = "hi";
return name;
}
}
这里,return name 返回的将是 "hi",而不是上面的 name 属性。为了代码阅读方便,建议不要省略 this。
静态方法、静态成员和静态域可以在没有实例的情况下执行,这时候 this 没有任何意义,所以这些地方不能使用 this。
public class Person {
static {
this.name = "hi"; // 错误,因为这段代码并不访问任何实例
}
public String name;
public static String toString() {
return this.name; // 错误,因为静态方法并不访问任何实例
}
}