问题描述
源代码如下:
public class Main {
public static void main(String[] args) {
MyClass mycclass = new MyClass();
}
}
class MyClass {
public void foo() throws Exception {
throw new Exception();
}
}
有人可以帮助我理解为什么 MyClass
初始化程序会抛出 ClassNotFoundException
但是当我从 throw new Exception()
函数中删除 foo
语句时它可以工作。
解决方法
您声明 foo
可能抛出任何类型的 Exception
。
任何可能抛出已检查异常(但不捕获它)的方法都需要使用 throws
关键字声明这一点。
您的 main
方法调用 foo
和 foo
可能会引发异常。 main 方法没有捕捉到它,所以它会向调用者抛出异常。
因此,main
方法也需要具有 throws Exception
声明。
出现ClassNotFoundException
的原因是由于编译失败或无效而找不到主类。
如果您查看编译器输出,您应该会看到一条错误消息,告诉您缺少 throws
声明(未捕获的异常)。