我使用反射来获取特定类的所有方法。
这个类引用了不在我的类路径中的类,因此我得到了一个例外:
java.lang.NoClassDefFoundError:
关于这个:
Method methods[] = theClass.getDeclaredMethods();
是否有可能“跳过”不在类路径中的所有内容?
答案 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实例指向路径,并加载该路径中的任何类。