版权声明:未经过博主同意,不得随意转发 https://blog.csdn.net/weixin_40918067/article/details/82177158
什么是this???——》一个关键字;
- 那this作用于何处???——》用来区分成员变量和局部变量; ???——》成员变量与局部变量同名???——》让变量更具有语义化
- ——》在构造函数中调用构造函数;
构造函数什么时候会被自动调用???——》创建新对象的时候;
为什么通过this就可以访问成员变量(也称为对象的属性)???——》this关键字可以指向对象???——》每个函数里面都有一个默认的this引用,当对象调用函数的时候,对象的地址就会赋给this关键字;
到了这里,相信大家已经对于this是什么和this有何作用及其它知识有所了解;
所以接下来,我们举例深入了解this:
class Person
{
private String name;
private int age;
Person(String name)
{
this();
this.name = name;
}
public static void main(String[] args)
{
Person p = new Person("旺财");
}
所以说,其实this放就是对象的地址;接下来我们可以打印出this的结果:
class Word{
public static void main(String[] args) {
Demo d=new Demo();
}
}
class Demo{
Demo(){
System.out.println(this);
}
}
解析
- 怎么看出this的结果是一个哈希地址???——》@左边代表Demo类型,右边是地址;
- 没有写this的,为什么局部变量没有和成员变量发生冲突情况???——》栈中没有这个变量名,它就去堆中找这个变量???——》当去堆中找的时候,其实是帮我们默认加上this了;
this如何在构造函数中调用另一个构造函数???——》如下图所示:
解析上图内容:
- 如上图所示:在第二个构造函数中调用第一个构造函数;
- 如果当一个对象创建的时候调用第二个构造函数,那么此时this 就指向这个对象(可以说是这个对象的名称吧);
- 如果this(name),可以调用第一个构造函数,此时第一个构造函数里的this也有了这个对象的地址,可以初始化对象。
- 画出内存图解,加深理解;
运用this关键字时该注意以下几点:
- 为什么调用构造函数的语句一定要写在第一行;???——》初始化语句放在后面是会编译报错的;???——》初始化最先;
- 为什么不能在普通函数中调用构造函数的原因???——》要先初始化,才有之后的计算;
- 函数是一个封装体,如果传的参数进去得到另一个值,那么功能就改变了,是一种极其不严谨的行为;
- 为什么是一种极其不严谨的行为???——》
- 构造函数只能在对象创建的时候调用仅调用一次???——》构造函数作用是初始化,初始化仅有一次???——》有了初始化,各个变量才有了初始值,之后的赋值才都不是初始化;