Person p=new Person()的感悟

做过4个月的程序员,但是对程序的理解总是迷迷糊糊。

Person p=new Person();在写这行代码的时候,我的脑海只有一个思想创建一个对象p,类型为Person.很简单,很死板。如果像我考虑很少从没有清晰的内存加载思路的人看来已经被代码格式化了。

当听完毕向东老师讲述关于该语句的内存加载过程之后,突然有一种醍醐灌顶的感觉。拨开层层云雾,剑指目标明确。下面我就来说一下我理解的内存加载顺序,和内存加载内容吧

1.首先虚拟机读取指定的路径下的Person.class文件,并加载至内存(如果该对象有直接父类则会先加载父类)----方法区也称为数据区

2.在栈内存执行main函数,声明变量p ----栈内存main函数中

3.在堆内存开辟空间,将对象的属性默认实例化,int类型为0,String类型为null.... 产生一个堆内存中的地址 ----堆内存中

4.调用对应的构造函数进行初始化,子类构造函数进栈,栈内存加载构造函数 ----栈内存中

5.在执行构造函数的第一行中会执行直接父类的相应构造函数,直接父类构造函数进栈 ----栈内存中

6.在执行完父类的构造函数之后,父类构造函数弹栈,开始对子类的属性进行显示初始化 ----栈内存中

7.进行子类构造函数的特定初始化例如声明赋值变量,当然这种情况较少 ----栈内存中

8.初始化完毕,讲Person类堆内存地址赋值给栈内存main函数中的引用变量p

有了以上的大体思路之后,我们再理解这句话的含义(Person p=new Person()),窝的脑海中便会在执行这句话的同时,内存加载顺序便会在我脑海中清晰流动。

对于equals和==的理解总是我的一个难点,但是如果我们脑海中有关于内存的图像,你就会明白equals与==的区别,这比我们死记硬背感悟的跟多,理解的更透彻。

以上是我的第一篇博客,疏漏之处必须很多,请大家谅解。以后我会多多改善

经验分享 程序员 微信小程序 职场和发展