我查看了http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html并看到了class.forname(String className)和“返回与该类关联的Class对象”此方法在哪里查找该类?它是在调用该方法的类的java项目的包中吗?如果有多个具有相同名称的类,该怎么办? Api不会讨论这些情况
答案 0 :(得分:4)
如果您仔细阅读JavaDoc,您将看到以下内容:
返回与具有给定字符串名称的类或接口关联的Class对象。调用此方法相当于:
Class.forName(className,true,currentLoader)
其中currentLoader表示当前类的定义类加载器。
这意味着该类将从当前的类加载器加载,如果没有这样的类,则类加载器很可能会委托给它的父类(确切的行为取决于它是什么类加载器)。
如果有多个具有相同名称的类会怎样?
如上所述,类加载器层次结构将尝试加载最具体的类,即从最知道该名称类的特定类加载器。
由于classname必须是完全限定的类名,即"java.lang.String"
而不是"String"
,因此每个类加载器都是唯一的。
如果在类路径中有多个包含相同类的库,则它依赖于类加载器和类加载器层次结构,这些类加载并返回了哪些类。
答案 1 :(得分:0)
它在类路径中查找给定的类。如果存在具有相同包/名称的多个类,则使用第一个类。
答案 2 :(得分:0)
首先它会查看当前项目,如果找到则会停止搜索。
其次,如果它没有找到,那么它会检查依赖的罐子,这些罐子是jdk的内置罐子。如果它仍然没有找到,那么它会在外部罐子中查找..
在这个过程中,如果它在它之间发现它将停止搜索..所以即使有多个同名的类,没有问题..它只需要一个..
重要的是,任何类只由JVM加载一次..