序言
Person

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 + "]"; } }
new
public class NewObjectTest { public static void main(String[] args) { Person p = new Person("張三",18); System.out.println(p.toString()); } }
首先要明確的是在編譯完成后,文件夾中會NewObjectTest.class和Person.class兩個class文件
jvm讀取main方法入口,發現Person p = new Person("張三",18); 這個需要new新對象的句子(實際並非如此,jvm讀取的只是class中的字節碼),然后進行以下操作:
1. 加載Person.class文件到方法區,同時加載Person類中的static屬性
2. 在main方法所在的棧區分配引用(reference) p;
3. 在java堆中開辟空間存放Person類,但是不進行初始化操作。
4. 默認初始化數據
5. 將引用p指向java中新開辟的Person類
資料
https://www.cnblogs.com/JackPn/p/9386182.html
https://blog.csdn.net/weixin_41005192/article/details/80530530