this引入
class Test{
public static void main(String[] args) {
Student stu = new Student();
stu.setName("小东西");
System.out.println(stu.getName());
}
}
class Student{
private String name;
private int age;
public void setName(String name){//命名应写成 name见名知意思,但写完之后,存取不到值,堆栈分析,变量使用就近原则
name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
age = age;
}
public int getAge(){
return age;
}
}
尝试使用this 解决问题
this介绍
-
this的概念:this指代当前对象,持有当前对象的地址
-
2.如何判断this指代的是哪个对象
官方:this所在的函数,正在被谁调用this就指代谁
民间 :this当前被对象持有,this就指代谁,模板---->复印件 -
this理解 示意图
-
4.测试this持有当前对象地址
class Test{
/*
1.官方 :this所在的函数,正在被谁调用this就指代谁
2.理解 :this表示的是当前对象,可看成this持有当前对象的地址值;
3.民间 :this当前被哪个对象持有,this就指代谁,模板---->复印件【复印件中包含 this,this指代当前复印件即对象】
*/
public static void main(String[] args) {
/*this表示的是当前对象,可看成this持有当前对象的地址值; this存在于该对象复印件中,所以this指代当前对象*/
Student stu1 = new Student();
System.out.println("this所在函数stu1=" + stu1);
stu1.eat();//1. this所在函数正在被谁调用this就指代谁: this指代stu
//this指代当前对象,换了其他对象,this代表的就是其对象了
Student stu2 = new Student();
System.out.println("this所在函数stu2=" + stu2);
stu2.eat();//1. this所在函数正在被谁调用this就指代谁: this指代stu
}
}
class Student{
void eat(){
System.out.println("this所在函数this=" + this);
}
}
- this持有当前的对象地址 : this应该在类设计的是时候使用
- this不能写在静态的方法中 : 无法从静态上下文中引用非静态 变量 this
static类级别
this对象级别
this使用场景
- 解决局部变量和成员变量的二义性 — get set 方法中的应用[在get/set可以写this]
- 作为返回值返回 : this持有对象地址,表示该类的一个对象即是一个数据
- 作为参数传递
本类中构造方法之间的相互调用
this总结
- this用途:
解决局部变量和成员变量的二义性–》注意 set/get方法 构造方法
this作为参数传递,this作为返回值
在本类之间 ,构造方法之间的相互调用 this()调用无参数的构造方法,this(…)可以添加参数,表示调用有参数的构造方法