类的加载、对象的创建

java虚拟机负责把描述类的数据从Class文件加载到系统内存(方法区:存储虚拟机加载的类的信息、常量、静态变量、即时编译器编译后的的代码等数据),并对类的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程称之为类的加载过程。

在JVM中,一个对象如何创建?

  当虚拟机遇到一个new指令时,首先会先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用所代表的类是否已经被加载、解析和初始化。(因此这时候很可能不知道具体的类是什么,所以使用引用符号代表)。如果没有发现相应的加载的类,就先进行类的加载。然后Java虚拟机会给对象进行设置,比如确定对象是哪个类的实例、对象的hashcode、对象的gc分代年龄信息。这些信息存放在对象的对象头中。做到这里,从虚拟机的角度来讲一个新的对象就创建完毕,可是对于程序员来说,对象的创建才刚开始,因为构造函数还没有执行(也就是Class文件中的<init>()方法还没有执行,所有字段都为默认的0值),new 之后才会执行init初始化,然后按照程序员意愿对对对象进行初始化,这样一个完整的对象才被创建。

posted @ 2022-03-23 10:20  ganrui~~~  阅读(52)  评论(0)    收藏  举报