2

我找到了人们遇到的其他线程并解决了这个错误;但是,所有这些都没有使用完全限定的类路径。我似乎无法让 Class.forName 工作,我正在使用完全限定的路径。

我已经测试过从 CLI 编译并使用 ItelliJ Idea。两者都因相同的错误而失败。

代码(在测试目录中):

package test;
public class Test {
  public static void main(String[] args) {
    Class cls = Class.forName("java.util.ArrayList");
  }
}

错误:

java.lang.ClassNotFoundException; 必须被抓住或宣布被扔掉

上面的例子不起作用。提前致谢!

4

5 回答 5

6

您收到此消息是因为ClassNotFoundException是已检查异常。这意味着这个异常不能被忽略。您需要用一个try/catch构造包围它并提供异常处理,或者throws向您的方法添加一个子句并在被调用者中处理它。

编辑: 请注意,Class.forName()在编译期间未解析构造。当您编写这样的语句时,您是在告诉 JVM在程序执行期间查找可能尚未加载的类。Java 库是动态链接而不是静态链接的,这意味着它们的代码不会合并到您的程序代码中,仅在请求时才加载。这就是它抛出的原因ClassNotFoundException

于 2014-03-16T04:55:17.563 回答
1

Class.forName("java.util.ArrayList")声明为抛出已检查异常的方法ClassNotFoundException,因此您必须在try/catch块内处理它,如下所示

package test;
public class Test {
  public static void main(String[] args) {
    try {
        Class cls = Class.forName("java.util.ArrayList");
    } catch (ClassNotFoundException e) {
    // Handle it here
    }
  }
}
于 2014-03-16T04:57:02.927 回答
1

尝试这个:

try{
  Class cls = Class.forName("java.util.ArrayList");
}catch(ClassNotFoundException e){
  ... do messaging or logging
}

throw ClassNotFoundException在方法签名中:

public static void main(String[] args) throws ClassNotFoundException {
于 2014-03-16T05:01:07.590 回答
0

有两种选择:

  1. try-catch块包围并做一些适当的处理:

    package test;
    public class Test {
      public static void main(String[] args) {
        try {
            Class cls = Class.forName("java.util.ArrayList");
        } catch(ClassNotFoundException e)  {
            System.out.println("This is not a very serious exception, or at least Test knows how to handle it");
        }
      }
    }
    
  2. 把它扔到方法之外,希望某些调用方法知道该做什么。

    package test;
    public class Test {
      public static void main(String[] args) throws ClassNotFoundException {
        Class cls = Class.forName("java.util.ArrayList");
      }
    }
    
于 2014-03-16T04:59:43.403 回答
0

我不知道为什么上面的答案都不能解释为什么会发生这个错误。我也不能,但我曾经遇到过这个问题并通过使用解决了它

Thread.currentThread().getContextClassLoader().loadClass($YOUR_CLASS_NAME)

希望它可以解决您的问题,并希望有人能给我们一个解释。

于 2016-11-28T12:30:24.760 回答