今天是2020年最后一个工作日了,祝各位阅遍山河,仍觉人间值得!
全是干货,一网打尽类的基础知识!先看看下面的问题都能回答上来吗?
-
描述new一个对象的过程,并结合例子说明。
-
类初始化的触发时机。
-
多线程进行类的初始化会出问题吗?
-
类的实例化触发时机。
-
<clinit>()方法和<init>()方法区别。
-
在类都没有初始化完毕之前,能直接进行实例化相应的对象吗?
-
类的初始化过程与类的实例化过程的异同?
-
一个实例变量在对象初始化的过程中会被赋值几次?
描述new一个对象的过程
先上图,再描述:
![类加载链接](https://img-blog.csdnimg.cn/2021012520452582.png)
![](https://img-blog.csdnimg.cn/20210125204613619.png)
![](https://img-blog.csdnimg.cn/20210125204730975.png)
Java中对象的创建过程包括 类初始化和类实例化两个阶段。而new就是创建对象的一种方式,一种时机。当执行到new的字节码指令的时候,会先判断这个类是否已经初始化,如果没有初始化就要进行类的初始化,也就是执行类构造器<clinit>()方法。如果已经初始化了,就直接进行类对象的实例化。
- 类的初始化,是类的生命周期中的一个阶段,会为类中各个类成员赋初始值。
- 类的实例化,是指创建一个类的实例的过程。
但是在类的初始化之前,JVM会保证类的加载,链接(验证、准备、解析)四个阶段都已经完成&#