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

https://www.cnblogs.com/ilovejaney/p/13867667.html

posted @   ~沐风  阅读(2806)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示