我有像这样的自定义异常
public class MyOwnException extends Exception {
}
然后在我班上
我有两种方法
public void ExceptionTest() throws Exception {
throw new FileNotFoundException();
}
public void ApplicationExceptionTest() throws MyOwnException {
throw new FileNotFoundException();
}
Eclipse抱怨第二个方法'Unhandled exception type FileNotFoundException'。我想,因为MyOwnException扩展了Exception,它不应该抱怨...
谁能告诉我这里缺少什么?
答案 0 :(得分:9)
扩展树
FileNotFound和MyOwn彼此不认识。
public void ApplicationExceptionTest() throws Exception
{
throw new FileNotFoundException();
}
是要走的路
<强>注释:强>
我希望这仅适用于模型测试,而不是用于实现您在常规源代码中使用的类!
答案 1 :(得分:3)
您的方法声明它会抛出MyOwnException
,但FileNotFoundException
不是 MyOwnException
。仅仅因为它们都是Exception
的子类,最终并不意味着它们与彼此相关。
如果throws
子句中明确列出了该异常类或超类,则只能抛出已检查的异常。 MyOwnException
不是FileNotFoundException
的超类。
你为什么要这样做?
答案 2 :(得分:2)
你说ApplicationExceptionTest会抛出MyOwnException。虽然MyOwnException扩展了Exception,但这与此无关,因为FileNotFoundException不会扩展MyOwnException。
如果它更容易,请尝试使用“Shape”替换Exception,使用“Square”替换FileNotFoundException,使用“Circle”替换MyOwnException。所以你说你扔了一个圆圈,但你实际上扔了一个正方形。两者都是形状并不重要。
(顺便说一下,你的命名约定对于Java来说非常不典型。在Java中,方法通常以小写字母开头。)
答案 3 :(得分:1)
Java中的已检查异常通常是一个坏主意,因为它经常会导致“异常意外”。大多数现代框架都不使用检查异常 - 实际上,大多数框架都使用未经检查的异常包装现有的遗留检查异常。