- 作用:出现在成员方法,构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法。
- this出现在 有参数构造器 中的用法 (this.成员变量 = 局部变量)
- this出现在 成员方法 中的用法 (this.成员变量 指明此时的变量是成员变量)
1、this关键字的作用?
- 代表当前对象的地址
- 可以区别 成员变量 和 局部变量
- this修饰的变量用于指代成员变量
- 方法的形参如果与成员变量同名,不带this修饰的变量指的是形参,而不是成员变量
- 方法的形参没有与成员变量同名,不带this修饰的变量指的是成员变量
2、this关键字在构造器中、成员方法中可以做什么?
3、this的本质
- 代表 所在 方法 调用者 的 地址值
- 代表所在类的对象引用
- 方法被哪个对象调用,this就代表哪个对象
4、什么时候使用this呢?
5、在本类的成员方法中,访问本类的成员变量
public class Fu {int num = 30;
}
class Zi extends Fu {int num = 20;public void showNum() {int num = 10;System.out.println(num);//局部变量 10System.out.println(this.num);//本类中的成员变量 20System.out.println(super.num);//父类中的成员变量 30}public static void main(String[] args) {new Zi().showNum();}
}
6、在本类的成员方法中,访问本类的另一个成员方法
public class Fu {}
class Zi extends Fu {public void methodA() {System.out.println("AAA");}public void methodB() {methodA();this.methodA();//this可以省略System.out.println("BBB");}
}
7、在本类的构造方法中,访问本类的另一个构造方法
- this(. . .)调用也必须是构造方法的第一个语句,唯一一个
- this(. . .)语句必须在构造器的首行,第一行(Call to 'this()' must be first statement in constructor body)
- super() 和 this() 两种构造调用,不能同时使用
public class Fu {public Fu() {System.out.println("super()过来的");}
}
class Zi extends Fu {public Zi() {this(12);//本类的无参构造,调用本类的有参构造}public Zi(int n) {this(1, 2);}public Zi(int n, int m) {
// super(); 省略不写,默认赠送}
}

- 在继承关系中,如果new的是子类对象,无论是多态还是 Son son = new Son(),this在父类构造器中指代的都是子类对象,因为 new Son,而不是父类对象,所以调用的是子类重写的print方法,但是如果 this.x ,调用的就是父类的属性 x,这里调用方法和属性的规律,就相当于多态的调用规则,如果子类有重写的方法,就调用子类重写的,如果没有重写,还是会调用父类的方法
- 在继承关系中,如果new的是子类对象,无论是多态还是 Son son = new Son(),this在父类构造器中指代的都是子类对象,因为 new Son,而不是父类对象,但是调用属性(this.x)都是调用父类的属性,而不是子类的,相当于多态调用属性的规则