学习笔记--面向对象与封装(三)一个对象的内存图
我们新建一个手机Phone类,当我们实例化一个手机类并调用其中的成员变量和成员方法的时候,其内存图如下所示
首先,程序运行的时候,首先加载的是方法区。会加载class文件,类当中的方法和成员变量保存在方法区,然后找到main方法,然后进栈执行main方法。首先执行第一行
Phone one = new Phone();
one 变量是一个引用变量,保存的是new phone()的地址值。
new出来的东西全部保存在堆中。其中成员方法也是引用变量,保存的是在方法区的地址值。
当main方法执行到one.call()这一行时,call方法压栈,程序执行call方法,call执行完从栈中弹出,继续执行main方法的one.sendMessage()
当我们再创建一个对象时 Phone two = new Phone();
在堆内存中会开辟一个独立的空间用于存储这个Phone的属性和方法,由于方法是引用传递,所以不管new多少个Phone都会使用方法区中的同一个成员方法。
如果我们改成 Phone two = one;那么将会是同一个对象的引用。one的改变同样会改变two的值,修改two的值,one的值也会改变。