Java 当存在通配符时,类加载器是否加载完整的包?
Java类加载器如何加载导入,如Java 当存在通配符时,类加载器是否加载完整的包?,java,package,classloader,Java,Package,Classloader,Java类加载器如何加载导入,如import Java.util.*?我这样问是因为我有一个定制的类加载器,有时会要求它加载一个包而不是类。例如: public Class<?> loadClass(String className) throws ClassNotFoundException { System.out.println(className); return parent.loadClass(className); } 因此,似乎整个包都被请求了(可能
import Java.util.*
?我这样问是因为我有一个定制的类加载器,有时会要求它加载一个包而不是类。例如:
public Class<?> loadClass(String className) throws ClassNotFoundException
{
System.out.println(className);
return parent.loadClass(className);
}
因此,似乎整个包都被请求了(可能是由于导入org.test.model.*
?)我不确定是导入导致了这一问题(以及如何处理),还是一切都很好,应该是这样。提前谢谢
注意:这个问题似乎是我的问题的根源
编辑
从下面的答案中,我知道类是在引用时加载的,
import
语句并不重要。无论如何,为什么要加载包(如上面示例中的“org.test.model
”?或者这样的请求意味着什么?“导入”只是语法上的糖分。当你的代码被编译成字节码时,所有的类都会被它们的完整包引用。name这里要理解的是,ClassLoader
不会解析导入,它们会在引用类时懒散地解析类。它们可能会被急切地使用Class.forName(String className)
解析
因此,基本上,如果您使用的是
import myclasses.unusedPackage.*
,它不会解析包中存在的所有类,而是只在引用类时加载类 这也算JSP编译吗?这如何解释org.test.model
-请求?我不知道你解释org.test.model是什么意思对不起,我的意思是我的日志显示类org.test.model.User
被请求,以及“类”org.test.model
。你知道为什么吗?似乎有人插手回答了这个问题。重申一下:JRE之外的类是惰性加载的。JRE作为一个单元加载,以防止包/类黑客攻击
org.test.model.User
org.test.model
org.test.model