Java基础(分析this和super关键字)

Java初学 同时被 2 个专栏收录
7 篇文章 0 订阅
5 篇文章 0 订阅

1.this关键字

简单来说this关键字代表当前对象,是哪个对象调用此方法,this就相当于哪个对象。

2.super关键字

代表父类在内存空间中存储的位置。

3.接下来了解对象实例化和调用方法过程

3.1程序编写
3.1.1 首先创建父类Person类

public class Person {
   
    public int age = 10;

3.1.2 接下来创建子类Student类

public class Student extends Person{

    public int age = 20;

    public void show(){
        int age = 30;
        System.out.println(age);
        System.out.println(this.age);
        System.out.println(super.age);
    }

}

3.1.3 测试程序

public class ExtendsDemo {

    public static void main(String[] args) {

        Student student = new Student();
        student.show();
    }
}

3.2分析过程
程序编写完成后进行编译生成ExtendDemo.class、Person.class、Student.class文件(存放在工程文件的out目录下),随后就是解释和运行ExtendDemo.class文件。
3.2.1 Person.class和Student.class进入方法区(优先载入父类)
在这里插入图片描述

3.2.2当class文件全部进入方法区后开始运行main函数方法,也就是main方法进栈;main方法进站后开始按顺序执行代码。

  1. 执行Student student = new Student();,随后虚拟机在堆内存中开辟空间分配地址给new Student();对象,类中的属性/成员变量跟随着对象进入堆内存进行默认初始化(父类属性也会跟随子类进入堆内存中);
  2. 并为父类变量打上super的标签,所以通过super关键字能够访问到父类变量;
  3. 随后子类构造方法进栈,并显示初始化父类属性;由于子类构造方法中包含隐式代码super();(由javac编译器自动添加),所以随即父类构造方法也会进栈;

在这里插入图片描述

  1. 父类构造方法完成后就出栈,并显示初始化子类属性;
    在这里插入图片描述
  2. 初始化完毕后,将对内存中的地址赋值给引用变量,随后子类构造方法出栈;并在栈中申请空间,声明引用变量;就此Student对象实例化完成。

在这里插入图片描述

3.2.3 创建实例化对象完毕后,使用对象的引用变量来实现类中方法student.show();

show()方法进栈

在这里插入图片描述
如上图所示show方法中需要打印三个值age,this.age,super.age

  1. age直接指向的是show方法中的局部变量int age = 30;
  2. this.age中由于show方法是studnet调用的,所以此处的this也就指代student并指向堆内存中的地址0x0001,因此调用的是Student类中创建的public int age = 20;
  3. super.age则直接指向new Student()对象中做有super标记的父类属性内存空间pulic int age = 10;

3.2.3 所以最终的输出结果就是:
在这里插入图片描述

总结

1.this关键字表示本次调用方法的那个对象空间;
2.super关键字表示本次调用方法的那个对象类的父类属性空间。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值