java - 尝试初始化 class 时引发异常的 ClassNotFoundException
java - ClassNotFoundException when trying to init a class which throws Exception
源码如下:
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
但是当我从 foo
函数中删除 throw new Exception()
语句时它起作用了。
您声明 foo
可能会抛出任何类型的 Exception
。
任何可能抛出已检查异常(但未捕获异常)的方法都需要使用 throws
关键字进行声明。
您的 main
方法调用 foo
和 foo
可能会引发异常。 main 方法没有捕捉到它,所以它会将异常抛给它的调用者。
因此,main
方法也需要有 throws Exception
声明。
出现ClassNotFoundException
是因为未找到主要的class,因为它编译失败或无效。
如果您查看编译器输出,您应该会看到一个错误,告诉您缺少 throws
声明(未捕获的异常)。
源码如下:
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
但是当我从 foo
函数中删除 throw new Exception()
语句时它起作用了。
您声明 foo
可能会抛出任何类型的 Exception
。
任何可能抛出已检查异常(但未捕获异常)的方法都需要使用 throws
关键字进行声明。
您的 main
方法调用 foo
和 foo
可能会引发异常。 main 方法没有捕捉到它,所以它会将异常抛给它的调用者。
因此,main
方法也需要有 throws Exception
声明。
出现ClassNotFoundException
是因为未找到主要的class,因为它编译失败或无效。
如果您查看编译器输出,您应该会看到一个错误,告诉您缺少 throws
声明(未捕获的异常)。