我偶然遇到了一个有趣的错误,我需要你帮我弄清楚。

至于下面的代码,一切正常:

public class HelloWorld{
    public static void main(String[] args){
        System.out.println("hello world");
    }
}

然后至于以下代码,有趣的事情来了。
import junit.framework.TestCase;

public class HelloWorld extends TestCase{
    public static void main(String[] args){
        System.out.println("hello world");
    }
}

当我运行它时,它说



我知道当 jvm 加载 HelloWorld class 时,它​​会先加载 TestCase class。所以我做了下面的代码段。
public class HelloWorld {
    public static void main(String[] args) throws ClassNotFoundException{
        Class.forName("junit.framework.TestCase");
    }
}



我不知道为什么?也许 TestCase 类不在我的类路径上?但是对于第二个代码段,我确保 TestCase 在我的类路径上。

所以我的问题是:
  • 为什么我不能加载 TestCase 类?
  • 为什么在扩展TestCase 类时无法找到或加载主类?

  • 注意:我知道打印 helloworld 函数与用于 junit 测试的 TestCase class 没有任何关系,但我想弄清楚导致这个惊喜的原因。

    最佳答案


     Class.forName("junit.framework.TestCase");
    

    返回与 TestCase 类关联的 Class 对象。它不设置类路径。

    这就是你提出异常(exception)的原因:



    您尝试加载不在类路径中的类。

    要解决 Eclipse 的问题,请进入项目的属性窗口,然后在左侧有 Java Build Path 选项,进入并查看库选项卡。在这里,如果您希望 JUnit 位于类路径中,您应该添加 JUnit 库。

    关于java - 为什么在扩展 TestCase 类时无法找到或加载主类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41179203/

    10-14 10:29