1. 程式人生 > >Java面試題系列(三)Java new一個對象的過程中發生了什麽

Java面試題系列(三)Java new一個對象的過程中發生了什麽

進行 col over mage 兩個 http system jvm art

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

Java面試題系列(三)Java new一個對象的過程中發生了什麽