欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 在new一个新对象的时候内存中发生了什么

程序员文章站 2022-04-04 20:12:55
...
public class NewObjectTest {
	public static void main(String[] args) {
		
		Person p = new Person("张三",18);
		System.out.println(p.toString());
		
	}

}
class Person{
	private String name;
	private int age;
	
	public Person() {
		super();
	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

  首先要明确的是在编译完成后,文件夹中会NewObjectTest.class和Person.class两个class文件

  jvm读取main方法入口,发现Person p = new Person("张三",18); 这个需要new新对象的句子(实际并非如此,jvm读取的只是class中的字节码),然后进行以下操作:


java 在new一个新对象的时候内存中发生了什么

1. 加载Person.class文件到方法区,同时加载Person类中的static属性

2. 在main方法所在的栈区分配引用(reference) p;

3. 在java堆中开辟空间存放Person类,但是不进行初始化操作。

4. 默认初始化数据

5. 将引用p指向java中新开辟的Person类