通过Class.forName加载动态类是否适用于简单的类名

时间:2013-03-11 20:44:10

标签: java classnotfoundexception dynamic-class-loaders

我尝试在一个简单的程序中动态加载类,并且有趣的是,当我尝试使用简单名称动态加载类时,它会因classnotfoundexception而失败。只有当类在默认包以外的包下时才会发生这种情况。

但是当我指定完整路径名时,动态加载成功。正在加载的类与Main类位于同一个包中。

File Main.java:

public class Main {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {                  
        System.out.println(Class.forName("m"));
    }
}

class m extends Main{
}

2 个答案:

答案 0 :(得分:3)

不,Class.forName 总是需要包限定的类名。来自parameter documentation

  

className - 所需类的完全限定名称。

调用代码的包是无关紧要的。

答案 1 :(得分:0)

您必须为此类

添加完全限定的类名

,例如System.out.println(Class.forName("com.sample.M"));

假设

com.sample是您的类包名称。