Java-为什么此输入不生成ClassNotFoundException

时间:2018-11-21 00:02:27

标签: java reflection classnotfoundexception linkageerror

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

1 个答案:

答案 0 :(得分:4)

如果您向某些文件系统询问test1.class,它们会给您一个Test1.class而不是文件未找到(因为它们不区分大小写),并且该类文件不包含名为test1的类,但改为Test1(Java类名区分大小写),因此类加载器会出错。

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