35Chapter super 与this关键字图解 2020-01-26

代码执行是内存解析

    1.先加载至方法区,此时Zi.class{}内会自动加入一个 指向Fu.class{}的指向

    2.从方法区加载main方法进栈, 创建对象 Zi zi=new Zi();有地址指向堆内的0x666地址的对象.

    在堆内创建对象时先加载父类构造方法,然后再执行子类构造将父类构造完成的区域包裹起来

    3.执行zi.show()方法,从方法区找到方法然后show()方法进栈 int num=30为局部变量

    4.sout(this.num)为成员变量,此时通过this指向了堆内的对象,然后找到该对象的成员变量num

    5.sout(super.num)为父类变量,通过super找到0x666堆内的父类区域,然后找到父类的num

    6.执行zi.method(); 仍然先去方法区找到子类的method方法然后进栈,接着在子类method()方法里有 super.method() 意味着要执行父类的method()方法,那么去方法区Fu.class{}内找到父类的method()方法然后父类方法进栈,此时super.method()就指向了进栈的父类方法

    7.父类method()执行完毕,父类方法弹栈,接着子类method()执行完毕,子类方法弹栈以此类推,直到main方法弹栈结束

你可能感兴趣的:(35Chapter super 与this关键字图解 2020-01-26)