classloader加载类用的是父类委托机制。
父类委托机制:先让parent类加载器寻找,只有在parent找不到的时候,才从自己类路径中去寻找。
类加载器还采用了cache机制,如果cache中保存了这个class就直接返回它,并存入cache.这就是为什么修改了lass后,必须重新启动JVM才能生效,并且类只加载一次的原因。
值得注意的是,要是不采用父类委托机制,那么可能在不通的类加载器中,定义了相同的类。这样在实例化这个类时:
Demo demo = new Demo();
可能会出现左边Demo类是在一个类加载器中加载的,而右边的Demo用的另一个类加载器加载的。这就导致了采用了不通的Class字节码装载左右两边的Demo, 从而导致了类型转换异常。