Java面試題(3)Java new一個對象的過程中發生了什么


序言

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 + "]";
    }
}
View Code

 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM