0

当我使用反射时,我遇到了这个错误。我有一个名为 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());
        }
    }
}

测试1

public class Test1 {
}
4

1 回答 1

4

如果您询问某些文件系统,test1.class它们会返回 aTest1.class而不是 file-not-found (因为它们不区分大小写),然后该类文件不包含名为 的类test1,而是 a Test1(Java 类名是大小写-sensitive),从而使类加载器出错。

这在实践中很少出现问题,因为大多数应用程序都是使用 Jar 文件部署的(因此文件系统中的类没有单独的文件)。

于 2018-11-21T00:10:02.543 回答