Java对象创建过程分析

一、new Object()

在Java中,创建一个对象方法之一是使用new关键字,如下为创建一个对象的案例:

class ObjectDemo {

    public int id;

    @Override
    public String toString() {
        return "id:" + id;
    }

}

public class ObjectMain {
    public static void main(String []args) {
        // 使用new创建一个ObjectDemo对象
        ObjectDemo objectDemo = new ObjectDemo();
        System.out.println(objectDemo);
    }
}

二、对象创建过程

当我们使用new关键字创建一个对象后,JVM的执行流程是什么样的呢?此处只讨论非静态变量(没有static修饰的关键字)。

                                                             

                                                                                            图1 JVM执行过程

  1. 使用new创建一个对象时,JVM会先从常量池中检查是否有该类的引用,如果没有则需要先进行类加载操作,否则执行下一步;
  2. 存在该类的引用,根据该引用信息向堆中申请指定大小的内存(该内存在类加载后即被指定),并对非静态变量初始化(对于普通类型设置为0(如int),引用类型设置为null)
  3. 设置非静态变量的值
  4. 调用构造函数

三、变量值的变化状态

class ObjectDemo {

    // 非静态变量
    int num = 123;
    
    // 构造代码块
    {
        System.out.println("构造代码块->num: " + num);
    }
    
    // 构造函数
    public ObjectDemo(int num) {
        System.out.println("执行构造函数");
    }

}

// 主测试类
public class ObjectMain {
    
    // main方法
    public static void main(String []args) {
        // 查看代码块和构造函数的执行顺序,查看非静态变量设置值的时间
        ObjectDemo objectDemo = new ObjectDemo();
    }

}

代码执行结果如下:

构造代码块->num: 123
执行构造函数


四、实验结果分析

从实验结果可以看出:

  1. 创建一个对象时,非静态代码块的执行顺序为:构造代码块->构造函数
  2. 非静态变量值设置的时间顺序为:先根据所设定的值进行设置(程序中:int num = 123),然后根据构造函数所给的值进行设置
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值