如果我为我的Java应用程序的3(A,B,C)类创建一个自定义类加载器,并将所有其他加载重定向到默认的bootstrap类加载器。然后根据JVM规范: “从类当前的类加载器中查询对类的引用并相应地加载(如果需要)”
现在,如果我尝试从类A(其类加载器引用是自定义加载器)创建类D的对象(其类加载器引用是“类”类中的引导程序),那么自定义加载器没有任何方法找到D.class文件的路径(比方说我从互联网/其他地方选择A,B,C),在这种情况下,CLASSPATH在自定义加载程序中是不同的。)
那么JVM如何解决这个类发现问题?
答案 0 :(得分:3)
如果正确实现自定义类加载器,则没有问题。所有类加载器都有父级。对于自定义类加载器,它通常是系统类加载器,即从Java类路径加载类的加载器。通常,类加载器首先提供(委托)其父级来加载类,并且只有当父级失败时它才会尝试加载该类。为了实现这一点,自定义类加载器需要实现findClass
方法,并且委托将由ClassLoader.loadClass自动完成。
请注意,JVM不仅具有引导类加载器,还具有三个类加载器的层次结构
bootstrap< - extension< - system