有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ClassNotFoundException的原因

如果构建路径正确,并且所有类都可以访问(同一个包!),那么出现此异常的原因是什么?我该怎么做才能找到罪魁祸首呢? 谢谢


共 (3) 个答案

  1. # 2 楼答案

    build path is correct and all of the classes are accessible

    那你就不应该出错了。出现该错误的另一个原因是,该类是由子类装入器装入的,并且位于类路径中,但父类装入器试图访问它(假设委托模型是父类优先)。在这种情况下,类由JVM加载,但程序无法访问它

    仔细想想,根据类加载器的实例化和使用方式,还有一些更复杂的场景可能会导致类加载异常Commons logging遭受了这些问题的困扰,我接受这些问题的次数比我愿意承认的要多。如果你想看的话,有一个excellent article可以突出这些场景

  2. # 3 楼答案

    我会查一下你所有的类都是在哪个目录下建立的。我猜你会发现你的班级不见了


    编辑:正如@Hot Licks notes一样,你从一个坏掉的类中得到的错误是NoClassDefFoundError

    public static void main(String... ignored) {
        for (int i = 0; i < 3; i++) {
            try {
                new BrokenClass();
            } catch (Throwable t) {
                System.out.println(t);
            }
        }
    
    }
    
    static class BrokenClass {
        static {
            if (true)
                throw new AssertionError();
        }
    }
    

    在Java 7上打印

    java.lang.AssertionError
    java.lang.NoClassDefFoundError: Could not initialize class Main$BrokenClass
    java.lang.NoClassDefFoundError: Could not initialize class Main$BrokenClass