Java 关键字 --,
Java 关键字 --,
- 1 this出现的原因
- 2 this的作用1:区分参数变量和实例变量
- 3 this的作用2:在构造函数中调用其他构造函数
- 4 应用
this
代表本类对象的 引用 (地址)
- 区分
参数变量
和实例变量
- 在构造函数中 调用 其他构造函数
1 this出现的原因
当方法中参数的变量名
和实例变量的变量名
相同时,则需要使用 this.变量名
来表示实例变量。
class Person{
Person(String name)
{
name = name; // 这就是 局部变量和成员变量 重名了
// 一个在栈中,一个在堆中,互不影响,本来没问题,但是,
// 在使用的时候,出问题,所以要做一个区分,出现了 this
}
}
class ThisDemo
{
public static void main(String[] args)
{
Person p1 = new Person("aa");// 输出结果是 null,为什么
}
}
new Person(“aa”); — 去找函数Person(String name),而 Person(String name) 有自己的 name,Person(String name) 在栈区,不在堆区,它有自己的名字,就不再使用堆区的名字了。
2 this的作用1:区分参数变量和实例变量
this 代表 所在函数 所属对象的 引用
Person p = new Person("aa");
p.speak();
再次分析 new Person(“aa”); 上次分析见 Java基础 — 构造函数
首先进行两次初始化,默认初始化和构造函数初始化。
在构造函数进行初始化的时候,由于一个类可能会产生很多对象,要给谁进行初始化,在 Java 中,用 this 来表示。
this持有对象的引用
,谁调用 this,this 就指向谁,初始化完成,该构造函数弹栈,把地址赋给 p.speak() 中的 p。
p.speak(); speak(); 进栈,进栈后,用来说出某个对象的姓名和年龄,哪个对象,不知道。
其实,speak() 进内存的时候,也有一个 this,this 引用对象的地址,speak()指向 this所引用的对象。
System.out.println(name+”:”+age);
其实,这句话,应该是:
System.out.println(this.name+”:”+this.age);
注:一个类中的成员,除了静态的,如果想运行,都必须由对象调用,随便定义一个方法 method();
其实是 this.method(); ,只是省略了 this
3 this的作用2:在构造函数中调用其他构造函数
构造函数的区分,是通过 参数列表
来完成的。
this 可以用于 在构造函数中 调用其他构造函数。
注:只能定义在 构造函数的第一行,因为 初始化动作要先执行
说明:见代码
Person(String name)
{
this.name = name;
}
Person(String name,int age)
{
this.name = name; // 在上面写了 this.name = name;下面接着写,有点重复了,怎么办? 直接写 this(name);
this.age = age;
}
Person()
{
name = "baby";
age = 1;
System.out.println("person run");
}
Person(String name)
{
this(); --- 能不能用 this 调用上面的构造函数,可以。直接 this()就可以了,因为上面的构造函数,是无参构造函数
this.name = name;
}
4 应用
// 判断是否是同龄人
写函数之前的思考:
比较的是年龄,按理说传的参数应该是 age,但是 Java 是面向对象的语言,我们应该用 面向对象的思想 来思考,
所以,传入的 应该是 Person,Person里封装了 age.
public boolean compare(Person p ){
/*
调用这个方法的对象,和 传入这个方法的对象,两个对象相比,
传入这个方法的对象是 p, 所以可以用 p.age 来表示,调用这个方法的对象,用 this.age 来表示
*/
/*
if(this.age == p.age)
return true;
else
return false;
*/
return this.age == p.age;
}
相关文章
- 暂无相关文章
用户点评