类加载的过程:
1、当在程序中要使用某个类的时候,JVM 会先在当前的方法区中找有没有这个class文件信息,如果没有这时JVM会先去加载这个class文件
2、加载的时候,如果配置了classpath环境变量,那么JVM会到classpath所指的目录下去找对应的class文件,如果没有配置classpath环境变量,那么就在当前目录下找对应的class文件。
3、当JVM找了对应的class文件之后,这时开始加载这个class文件。
4、加载的过程中,把类中的所有非静态的成员,会加载到内存中的方法区的非静态区中。类中所有的静态成员(静态变量,静态代码块,静态方法)加载到方法区中的静态区中。
5、给静态区中的所有静态成员变量开始默认初始化。
6、当所有的静态成员变量默认初始化完成之后,开始给所有的静态成员变量显示初始化(在源代码中使用赋值号赋的数据)。
7、所有静态成员变量显示初始化完成之后,开始执行类中的静态代码块。
8、类中所有的静态代码块执行完成之后,当前这个类加载结束。
对象的创建过程:
1、当类加载完成之后,就可以创建这个类的对象了。
2、在创建对象的时候,首先在堆中给这个对象分配内存空间,分配内存地址。
3、把当前类中的所有非静态的成员变量在堆中的对象中开辟空间并且给它们进行默认初始化
4、所有的非静态成员变量默认初始化完成之后,开始调用和当期创建对象对应的构造方法。
5、在调用对应的构造方法的时候,在构造方法中有隐式的三步:
5.1、先执行构造方法中的隐式的super()。找父类的构造方法去
5.2、给当前对象中的所有非静态成员变量进行显示的初始化。
5.3、构造代码块运行。
6、隐式三步执行完成之后,开始执行构造方法中书写的代码。
7、对象创建完成。把对象的内存地址赋值给当前的那个引用变量。