反射getDeclaredMethods()和不在类路径中的类

时间:2012-11-14 10:58:20

标签: java reflection

我使用反射来获取特定类的所有方法。

这个类引用了不在我的类路径中的类,因此我得到了一个例外:

  

java.lang.NoClassDefFoundError:

关于这个:

Method methods[] = theClass.getDeclaredMethods();

是否有可能“跳过”不在类路径中的所有内容?

1 个答案:

答案 0 :(得分:0)

Class.forName()不会加载类,无论它是否在类路径中。它只会返回已经加载的类的句柄。

一个类以两种主要方式之一加载:

1.)在import语句中引用该类(java.lang。*会自动导入,因此java.lang包中的每个类都从一开始就加载了类)

2.)使用来自ClassLoader的调用加载类,在这种情况下,解析所有依赖项。并加载

因此,如果您尝试在类路径之外加载类,或者在类路径之外加载依赖项,则需要继承ClassLoader,并告诉它如何加载类及其依赖项。

请参阅此处的ClassLoader规范:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ClassLoader.html

此外,还有现成的ClassLoader子类,可以执行您想要的操作,例如URL ClassLoader,它可以让您简单地将ClassLoader实例指向路径,并加载该路径中的任何类。