对象初始化首先由new开始或者访问了类的静态属性或者方法,jvm去加载class文件到内存中。
然后就是几个初始化过程:
-
静态初始化:执行对象的static代码块(父类和子类如果都有都会在这步执行),初始化class的静态属性和方法。这个过程都在jvm方法区,一个独立的内存区域。静态初始化只会被执行一次,被所有线程共享。
-
默认初始化:为对象开辟内存空间,所有属性和方法设置默认值(数字为 0,字符为 null,布尔为 false,而所有引用被设置成 null)。
-
检查与执行构造函数:检查是否有父类构造函数,如果有父类,先执行父类构造函数,再执行子类构造函数。执行构造函数前会先执行初始赋值,包括属性和方法。这个和构造函数内部代码要区分开。
总结:jvm方法区静态属性和方法赋值 -> 堆内存开辟空间 + 默认值 -> (初始值赋值+构造函数) * 父类到子类循环 -> 对象地址赋值到栈内存上去
参考文章:
Java对象初始化过程
对象初始化详细过程
网友评论