我找到了人们拥有的其他线索并解决了这个错误;但是,所有这些都没有使用完全限定的类路径。我似乎无法使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;必须被抓住或宣布被抛出
上面的例子不起作用。提前谢谢!
答案 0 :(得分:5)
您收到此邮件是因为ClassNotFoundException
是已检查的例外。这意味着不能忽略此异常。您需要使用try/catch
构造包围它并提供异常处理或向您的方法添加throws
子句并在被调用者中处理它。
修改强>
请注意,编译期间未解析Class.forName()
构造。当您编写这样的语句时,您告诉JVM在程序执行期间查找可能尚未加载的类。 Java库是动态链接的,而不是静态链接的,这意味着它们的代码未包含在程序代码中,只在请求时才加载。这就是它抛出ClassNotFoundException
的原因。
答案 1 :(得分: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
}
}
}
答案 2 :(得分: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 {
答案 3 :(得分:0)
有两种选择:
使用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");
}
}
}
将它扔到方法之外,希望某些调用方法知道该怎么做。
package test;
public class Test {
public static void main(String[] args) throws ClassNotFoundException {
Class cls = Class.forName("java.util.ArrayList");
}
}
答案 4 :(得分:0)
我不知道为什么上述答案都无法解释为什么会发生此错误。我也不能,但我曾经遇到过这个问题并使用
解决了这个问题 Thread.currentThread().getContextClassLoader().loadClass($YOUR_CLASS_NAME)
希望它可以解决您的问题,并希望有人可以给我们解释。