Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当存在通配符时,类加载器是否加载完整的包?_Java_Package_Classloader - Fatal编程技术网

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); } 因此,似乎整个包都被请求了(可能

Java类加载器如何加载导入,如
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