加载流程
当运行一个程序时,JVM启动
- 运行 bootstrap classloader,该ClassLoader加载Java核心API(ExtClassLoader和AppClassLoader也在此时加载)
- 调用ExtClassLoader加载扩展API
- APPClassLoader加载CLASSPATH目录下定义的Class
一些重要的方法
- loadClass方法,定义如下:
name:JVM需要的类的名称
resolve:方法是否需要解析类
- forName方法
该方法调用Class.forName(name,initialize,loader);
也就是等同于
initialize:设置加载类的时候是否连接该类
连接分为三步:
- 验证class是否符合规格
- 为类变量分配内存的同时设置默认初始值
- 解释,这一步是可选的,是否解释由loadClass方法的第二个参数来判断。这里的解释是指根据勒种的符号引用查找相应的实体,再把符号应用替换成一个直接引用的过程。
两个方法的区别:
ClassLoader.loadClass()不会初始化该类,而Class.forName()加载类时会进行初始化