Java是一种解释型语言,class文件只有被加载到JVM中才能运行。当运行指定程序时,JVM会将编译生成的.class文件按一定的规则(从硬盘)加载到内存中(由类加载器classLoader和它的子类来完成)。
有以下两种加载方式:
1)隐式加载:
程序使用new等方式创建对象时,调用类的加载器把对应的类加载到JVM中。
2)显式加载:
程序直接调用class.forName()方法把所需的类加载到JVM中。
在Java中,类的加载是动态的,并不是一次性将所有类全部加载后才运行,即需要的时候才去加载相应的类class。
类的加载器分为3类:
1)系统类Bootstrap Loader---负责加载系统类(jre/lib/rt.jar的类)
2)扩展类ExtClassLoader ---负载加载扩展类(jar/lib/ext/*.jar的类)
3)自定义类AppClassLoader---负责加载应用类(classpath指定的目录或者jar中的类)
当有类需要加载时,通过委托父类加载器来进行载入的方式进行。
类的加载步骤:
1)装载---根据查找路径找到相应的class文件,然后导入。
2)链接---①检查待加载的class文件的正确性②给类中的静态变量分配存储空间③将符号引用转换成直接引用(可选)。
3)初始化---对静态变量和静态代码块执行初始化操作。(加载时执行一次)