一.类型:
1.java虚拟机自带的类加载器
根类加载器(bootstrap)
c++实现,加载jre核心包的类,如:jie/lib/rt.jar 中的类,java.lang.Object ,java.lang.String等。
扩展类加载器(extension)
java实现,父加载器是根加载器。加载jre中扩展包的类,如:jre/lib/ext/dnsns.jar中的类。
系统类加载器(system)
java实现,父加载器是扩展类加载器。从环境变量classpath指定的目录中加载类。是抽象类java.lang.ClassLoader的子类。
2.用户自定义的类加载器
java实现,父加载器是系统类加载器。
二.加载过程
加载时采用的是父委托机制。(是逻辑上的parent关系,通过包含一个父加载器引用作为属性的方式实现。而不是继承上的关系)
总是先用父加载器加载类,层层传递直到根加载器。如果父加载器加载不了,就用当前层的加载器加载。
如果全都不能加载,则抛出ClassNotFoundException异常。