返回

JVM学习之对象的实例化

见解分享

在学习JVM时,对象实例化是一个关键的概念。本文将以深入浅出的方式讲解对象的实例化过程,并提供一些示例来帮助您更好地理解。

对象实例化过程

当JVM遇到一个new指令时,它会首先检查这个指令的参数能否在常量池中定位一个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化。如果没有,那么在双亲委派模式下,使用当前的类加载器以及全限定名的方式去查找class文件,如果没有找到,那么就会抛出一个ClassNotFoundException异常。

如果类已经被加载,那么JVM就会检查这个类是否已经初始化。如果没有,那么JVM就会执行类的初始化过程,这个过程包括验证字节码、准备数据区、分配内存、初始化静态变量、执行静态代码块等步骤。

类的初始化过程完成后,JVM就会为对象分配内存。对象的内存大小由类的实例变量的总大小决定。内存分配完成后,JVM就会为对象分配一个引用,这个引用指向对象在内存中的起始地址。

最后,JVM就会执行对象的构造方法。构造方法是一个特殊的成员方法,它会在对象被创建时自动执行。构造方法可以用来对对象的属性进行初始化。

示例

以下是一个简单的Java类:

public class Person {

    private String name;
    private int age;

    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;
    }
}

以下是一个创建Person对象的示例:

Person person = new Person("张三", 20);

当JVM执行这条语句时,它会首先检查Person类是否已经被加载、解析和初始化。如果没有,那么JVM就会执行类的初始化过程。类的初始化过程完成后,JVM就会为Person对象分配内存。内存分配完成后,JVM就会为Person对象分配一个引用,这个引用指向Person对象在内存中的起始地址。最后,JVM就会执行Person对象的构造方法,构造方法会将Person对象的name属性设置为"张三",age属性设置为20。

总结

本文介绍了JVM中对象的实例化过程,从类加载、类初始化、内存分配、构造方法执行到引用分配等步骤,深入浅出地讲解了对象实例化的原理和实现。通过示例,您可以更好地理解JVM中对象实例化的机制。