Class.forName(String className)在哪里查找类名?

时间:2014-07-09 08:40:07

标签: java class package project instance

我查看了http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html并看到了class.forname(String className)和“返回与该类关联的Class对象”此方法在哪里查找该类?它是在调用该方法的类的java项目的包中吗?如果有多个具有相同名称的类,该怎么办? Api不会讨论这些情况

3 个答案:

答案 0 :(得分:4)

如果您仔细阅读JavaDoc,您将看到以下内容:

  

返回与具有给定字符串名称的类或接口关联的Class对象。调用此方法相当于:     

Class.forName(className,true,currentLoader)

  其中currentLoader表示当前类的定义类加载器。

这意味着该类将从当前的类加载器加载,如果没有这样的类,则类加载器很可能会委托给它的父类(确切的行为取决于它是什么类加载器)。

  

如果有多个具有相同名称的类会怎样?

如上所述,类加载器层次结构将尝试加载最具体的类,即从最知道该名称类的特定类加载器。

由于classname必须是完全限定的类名,即"java.lang.String"而不是"String",因此每个类加载器都是唯一的。

如果在类路径中有多个包含相同类的库,则它依赖于类加载器和类加载器层次结构,这些类加载并返回了哪些类。

答案 1 :(得分:0)

它在类路径中查找给定的类。如果存在具有相同包/名称的多个类,则使用第一个类。

答案 2 :(得分:0)

首先它会查看当前项目,如果找到则会停止搜索。
其次,如果它没有找到,那么它会检查依赖的罐子,这些罐子是jdk的内置罐子。如果它仍然没有找到,那么它会在外部罐子中查找..

在这个过程中,如果它在它之间发现它将停止搜索..所以即使有多个同名的类,没有问题..它只需要一个..
重要的是,任何类只由JVM加载一次..