当有通配符时,ClassLoader是否加载完整的包?

时间:2014-09-23 17:24:11

标签: java package classloader

Java ClassLoader如何加载import java.util.*之类的导入?我问,因为我有一个自定义类加载器,有时会被要求加载包而不是类。例如:

public Class<?> loadClass(String className) throws ClassNotFoundException
{
    System.out.println(className);
    return parent.loadClass(className);
}

示例输出:

org.test.model.User
org.test.model
org.test.model

所以似乎整个包都被请求了(可能是由于import org.test.model.*?)我不确定导入是否导致了这个(以及如何处理它)或者如果一切都很好并且应该是这个办法。提前谢谢!

注意:这个问题似乎是我actual problem的根源。

修改 在下面的答案中,我明白在引用时加载了类,而import语句并不重要。无论如何,为什么要加载包(如上例中的“org.test.model”)?或者这样的请求意味着什么?

2 个答案:

答案 0 :(得分:0)

&#39;进口&#39;简直就是语法糖。当您的代码被编译为字节码时,所有类都由其完整的package.name

引用

答案 1 :(得分:0)

这里要理解的是ClassLoader没有解决导入问题,他们会在引用时懒得解决​​这些问题。可以使用Class.forName(String className)来急切解决这些问题。

所以基本上如果你使用import myclasses.unusedPackage.*,它不会解析包中存在的所有类,但只会在引用时加载一个类。