当我使用反射时,遇到了此错误。我有一个名为Test1的类,当我尝试通过输入test1作为Class.forName()的输入来获取它的Class对象时,它将生成LinkageError而不是ClassNotFoundException。为什么小写字母会混淆程序并阻止其生成通常的ClassNotFoundException,例如“ sjghdjgh”?
最小示例
主要
public class Main {
public static void main(String[] args) {
try {
Class.forName("test1");
}
catch (ClassNotFoundException cnfe) {
System.out.println(cnfe.toString());
}
catch (LinkageError le) {
System.out.println(le.toString());
}
}
}
Test1
public class Test1 {
}
答案 0 :(得分:4)
如果您向某些文件系统询问test1.class
,它们会给您一个Test1.class
而不是文件未找到(因为它们不区分大小写),并且该类文件不包含名为test1
的类,但改为Test1
(Java类名区分大小写),因此类加载器会出错。
这在实践中很少出现问题,因为大多数应用程序都是使用Jar文件进行部署的(因此文件系统中的类没有单独的文件)。