【问题标题】:Java exception handling - Custom exceptionJava 异常处理 - 自定义异常
【发布时间】:2009-07-24 06:58:38
【问题描述】:

我有一个这样的自定义异常

public class MyOwnException extends Exception {

}

然后在我的课堂上

我有两种方法

public void ExceptionTest() throws Exception {
  throw new FileNotFoundException();
}


public void ApplicationExceptionTest() throws MyOwnException {
  throw new FileNotFoundException();
}

Eclipse 抱怨第二种方法“未处理的异常类型 FileNotFoundException”。我想既然 MyOwnException extends Exception 它不应该抱怨......

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

【问题讨论】:

  • Java 方法名称的约定是它们应该以小写字母开头;例如exceptionTest 而不是 ExceptionTest。

标签: java exception inheritance


【解决方案1】:

扩展树

  • 异常
    • IO 异常
      • FileNotFoundException
    • MyOwnException

FileNotFound 和 MyOwn 互不认识。

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
}

要走的路

评论:

我希望这仅用于模型测试,而不是用于实现您不想在常规源代码中使用的类!

【讨论】:

  • +1 用于显示类层次结构。 @thomas_ds 您提到您有 Eclipse,因此您可以通过右键单击 MyOwnException 并选择“Open Type Hierarchy”或 F4 来查看此树。在这种情况下,Exception 和 IOException 都有很多其他的子类。
【解决方案2】:

您的方法声明它会抛出MyOwnException,但FileNotFoundException 不是 MyOwnException。仅仅因为它们都是Exception 的子类最终并不意味着它们彼此相关

只有在 throws 子句中明确列出了该异常类或超类时,您才能抛出已检查异常。 MyOwnException 不是 FileNotFoundException 的超类。

你为什么要这样做?

【讨论】:

    【解决方案3】:

    您是说 ApplicationExceptionTest 抛出 MyOwnException。虽然 MyOwnException 扩展了 Exception,但这里无关紧要,因为 FileNotFoundException 没有扩展 MyOwnException。

    如果这样做更容易,请尝试将 Exception 替换为“Shape”,将 FileNotFoundException 替换为“Square”,将 MyOwnException 替换为“Circle”。所以你说你扔了一个圆圈,但实际上你扔的是一个正方形。两者都是形状无关紧要。

    (顺便说一句,您的命名约定对于 Java 来说非常不典型。在 Java 中,方法通常以小写字母开头。)

    【讨论】:

      【解决方案4】:

      Java 中的检查异常通常是一个坏主意,因为它经常导致“异常意大利面条”。大多数现代框架不使用受检异常——事实上,它们中的大多数都将现有的旧受检异常与未受检异常包装在一起。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 2014-02-21
        相关资源
        最近更新 更多