类的初始化和实例化
首先需要确认的一点为类首先需要进行初始化,后进行实例化。这是两个步骤。
1.1类的生命周期
指一个class文件从加载到卸载的全过程,这个过程包含7个部分
加载→验证→准备→解析→初始化→使用→卸载
其中,验证——准备——解析 称为连接阶段,除了解析外,其他阶段是顺序发生的,而解析可以与这些阶段交叉进行,因为Java支持动态绑定(晚期绑定),需要运行时才能确定具体类型;在使用阶段实例化对象。对象的生命周期只是类的生命周期中使用阶段的主动引用的一种情况(即实例化类对象)。
2.1加载
java中我们常提起一个词语叫类加载,类加载和这里的加载并不是一回事。类加载指的是加载,连接,初始化三个阶段。回到加载。加载阶段,java虚拟机会做什么工作呢?
加载目的:找到需要加载的类并把类信息加载到方法区中。会在堆区实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。
类加载方式比较灵活,常用的有两种
- 根据类的全路径名找到相应的class文件,然后从class文件中读取文件内容
- 另一种是从jar文件中读取
- 从网络中获取:比如10年前十分流行的Applet。
- 根据一定的规则实时生成,比如设计模式中的动态代理模式
对于加载的时机取决于所用jvm。但是一定会在类将要被使用前进行加载。常用的hotspot是用到时才加载