当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。this是指向对象本身的一个指针。this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。
1、使用this调用成员变量和成员函数
使用this调用成员变量:this .成员变量
//Person类 class Person{ String name;//成员变量name void talk(){ //成员函数talk() System.out.println("My name is " + this.name); } }
class test{ public static void main(String args[]){ Person p1 = new Person(); p1.name = "zhangsan"; p1.talk(); Person p2 = new Person(); p2.name = "lisi"; p2.talk(); } }
this是对象,代表 调用了这个函数的对象。
当成员变量和参数(局部变量)的名字相同时,在方法体中如果不加this,使用的是参数而不是成员变量,要使用成员变量的话必须加this。this用于区别成员变量和参数。在没有同名的情况下,可以直接用成员变量的名字,可省略this,最好加上
例子如下:
//Person类 class Person{ String name;//成员变量name void talk(String name){ //成员函数 System.out.println("My name is " + name); } }
class test{ public static void main(String args[]){ Person p1 = new Person(); p1.name = "zhangsan"; p1.talk("zhangsan 1"); Person p2 = new Person(); p2.name = "lisi"; p2.talk("lisi 1"); } }
this同样可以调用本类中的成员函数:this . 函数名
如果在某个变量前面加上一个this关键字,其指的就是这个对象的成员变量或者方法,而不是指成员方法的形式参数或者局部变量。
2、使用this调用构造函数
//Person类 class Person{ String name; //成员变量name int age; String addr; Person(){ //构造函数 System.out.println("没有参数的"); } Person(String name ,int age){ //成员变量和参数重名 this(); //调用没有参数的构造函数 this.name=name; //用this把参数赋值给成员变量 this.age=age; System.out.println("两个参数的"); } Person(String name,int age ,String addr){ this(name,age); //this(参数列表):根据传入的参数个数和类型来调用本类中其他的构造函数 this.addr=addr; System.out.println("三个参数的"); } }
class test{ public static void main(String args[]){ Person p1 = new Person("zhangsan",20,"北京"); } }
当使用this(参数列表)来调用本类中其他的构造函数时,这行代码必须是第一条语句,构造函数内只能调用一个构造函数。