就根据下图进行说明,这行代码的执行具体过程如下:
(1)首先是在方法区对Person类进行加载。
(2)其次需要new 一个Person对象,那么就需要在堆中开辟一个空间,并且里面有初始值,这个操作也叫默认初始化(age是int类型的,age的初始值就是0,但是name是String引用类型的,那么它的初始值就是null)。
(3)然后就将堆中开辟的这个空间的地址赋值给栈中的这个引用变量中,也就是栈中的这个引用变量用来存地址值。
(4)然后就是进行指定初始化,也就是我们自己对属性进行赋值,因为小明是字符串类型,所以需要在方法区的常量池中开辟空间
最后总结一下,通常是类是需要先在方法区中加载一次(如果后面再使用该类就不要加载该类了),方法区中一般是常量池和类加载信息,栈中一般存在基本数据结构(或者局部变量),堆中一般存放对象。