Java面试:说一下New一个对象发生了什么?
New一个对象发生了什么?
1.把class文件加载到方法区中,
2.堆中分配对象内存,栈中分配引用内存
3.方法区中实例变量复制一份到堆中
4.实例对象从方法区中调用构造方法进行初始化堆中对象
例如:new Person() 发生了什么
1. 加载Person.class文件到方法区,同时加载Person类中的static属性
2. 在main方法所在的栈区分配引用(reference) p;
3. 在java堆中开辟空间存放Person类,但是不进行初始化操作。
4. 默认初始化数据
5. 将引用p指向java中新开辟的Person类
其他:静态变量是存在于方法区的,但操作对象的指向还是堆中的实体对象,
可以理解为方法区是一个简易模板模型