java中当一个对象创建后,java虚拟机就会给这个对象分配一个指向自己的指针,称为this。this随实例化对象而产生,因此this只用于非静态方法体内。主要有以下四点应用:
1.调用当前类的成员变量。如:this.name;//访问本类中的成员变量name
2.调用当前类的成员方法。如:this.fun(params…);//访问本类中参数为params…的成员方法fun
3.表示当前类对象的引用。如:return this;//返回当前类对象的值
4.在当前类的构造方法中调用本类的其他构造方法。如:this(params…);//调用本类中参数为params…的构造方法
下面一一附代码说明:
1.
public class Student { String name; private void SetName(String name){ this.name=name; } }
如上述代码,若局部变量与成员变量同名时,便显示出了this的作用。this关键字引用的便是成员变量,一目了然,便是将形参name赋给了成员变量name
2
public class Student { private void out1(){ System.out.print("123"); } private void out2(){ this.out1(); } }
如上述代码,out2()方法中利用this关键字调用了成员方法out1();需要注意的是,this关键字访问类的成员变量和成员函数时不受访问权限的控制,可以访问本类中包括private修饰的所有成员变量和方法。也可以通过this访问本类的static成员,不过由于static成员可以通过类名直接访问,如果通过this来访问会有警告信息。
3.
public class Student { private String name; public Student setName(String name){ this.name=name; return this; } }
如上述代码,调用setName方法后,将形参赋给成员变量后,return this表示返回了Student对象引用。注意,return this返回的是调用this所处方法的那个对象的引用。切勿混淆。
4.
public class Student { private String name; private char sex; public Student(){ this('男'); this.name = "周瑜"; } public Student(char sex){ this.sex=sex; } }
如上述代码,其中this(’男’)就是在第一个构造方法中调用了第二个构造方法,即没有参数的那个调用了有参数的那个。需要注意到是,其只能放在该构造方法体内的第一行,且不支持递归调用,即不能间接或直接地调用本身。
大乔注:若该类有派生类,则类中出现的关键字this的作用需注意:
1.在调用成员方法时,如果该方法被子类重写,则调用的是子类的成员方法,未被重写,则调用父类的成员方法。
2.return this中的this始终代表的是子类对象的引用。
3.调用成员变量和构造方法时,均是父类本类的,并无变化。