Java异常处理 - 自定义异常

时间:2009-07-24 06:58:38

标签: java exception inheritance

我有像这样的自定义异常

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,它不应该抱怨...

谁能告诉我这里缺少什么?

4 个答案:

答案 0 :(得分:9)

扩展树

  • 异常
    • IOException的
      • FileNotFoundException异常
    • MyOwnException

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中的已检查异常通常是一个坏主意,因为它经常会导致“异常意外”。大多数现代框架都不使用检查异常 - 实际上,大多数框架都使用未经检查的异常包装现有的遗留检查异常。