1、代表当前对象
2、this就是所在函数所属对象的引用,简单来说,哪个对象调用了this所在的函数,this就代表哪个对象
3、如下图,this代表的就是对象p,如右边内存图解,this会通过堆内存中新建对象的首地址,指向新建的对象
1、当成员变量和局部变量重名,可以用关键字this区分,如:
- class Person
- {
- private String name;
- private int age;
- Person(String name)
- {
- //成员变量和局部变量重名,可以用关键字this区分
- this.name = name;
- }
- public void speak()
- {
- //输出时,会默认为成员增加this关键字,用来代表具体对象的数据
- System.out.println(this.name+':'+this.age);
- }
- }
2、this关键字也可以用于在构造函数中调用其他构造函数。但是,只能定义在构造函数的第一行,因为初始化动作要先执行。如:
- class Person
- {
- private String name;
- private int age;
- Person()
- {
- name = 'baby';
- age = 1;
- System.out.println('Person run');
- }
- Person(String name)
- {
- //成员变量和局部变量重名,可以用关键字this区分
- this.name = name;
- }
- Person(String name,int age)
- {
- //调用其他构造函数时,只能定义在构造函数的第一行,因为初始化动作要先执行
- this();
- this.name = name;
- this.age = age;
- }
- public void speak()
- {
- System.out.println(this.name+':'+this.age);
- }
- }
- class ThisDemo
- {
- public static void main(String[] args)
- {
- Person p = new Person('小强',10);
- p.speak();
- }
- }
运行结果
我们可以看到,虽然我们在 Person(String name,int age) 构造函数中调用了 Person() 构造函数,但是最后的输出结果,仅输出了 Person run ,成员变量的内容还是我们在新建对象时,传递进去的参数,并不是 Person() 中初始化的内容。
可能有人会说,我们将调用的构造函数放在后面执行,不就行了,那么我们就来看看,如果将调用的构造函数放在后面,会出现什么结果:
我们可以看到,编译时就会提示错误,因为其他初始化要先执行,否则会破坏函数中的其他语句,如上面的例子,可能会覆盖我们需要传进去的参数,而且我们定义的函数是封装起来的。这也是Java中的语法规则。
联系客服