一、 对 Person p=new Person()的理解
- 要理解这个问题,首先要知道整个过程中内存中发生了什么!我们知道,内存中我们最常用的就是三个:栈、堆、方法区。其中对于基本值类型和引用变量(就是User user;中的user)来说,它们是存储在栈内存中的;而new出来的东西都是存储在堆内容中;而成员变量和成员方法在随着类的加载存储在方法区中。
- Person p=new Person();其实是两行代码的合并,我们将其分开再结合内存可以更好的理解这个问题。 Person p=new Person();其实等价于 Person person; person=new Person();文章最后会简单讲一下Person person = new Person(); Person person=null;的区别
- 下面我们就可以去更深入的去理解这个问题了。创建一个对象都在内存中做了什么事情?
- 3.1.JVM先将硬盘上指定位置的Person.class文件加载进内存(如果该对象有直接父类则会先加载父类)----方法区也称为数据区。
- 3.2.执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main 方法的栈区分配了一个变量p。— 这个可以将p看成一个引用变量(存在于main的栈内存中)
- 3.3执行new Person():在堆内存中开辟一个实体空间,然后将成员变量和成员方法放在new实例中。将该对象的成员变量默认实例化,int类型为0,String类型为null…,同时产生一个堆内存首地址值。
- 3.4.调用该实体对应的构造函数,进行构造函数初始化
- 3.5