Java异常处理-自定义异常

Java异常处理-自定义异常,java,exception,inheritance,Java,Exception,Inheritance,我有一个这样的自定义异常 public class MyOwnException extends Exception { } 然后在我的班上 我有两种方法 public void ExceptionTest() throws Exception { throw new FileNotFoundException(); } public void ApplicationExceptionTest() throws MyOwnException { throw new FileNot

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

public class MyOwnException extends Exception {

}
然后在我的班上

我有两种方法

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


public void ApplicationExceptionTest() throws MyOwnException {
  throw new FileNotFoundException();
}
Eclipse抱怨第二个方法“未处理的异常类型FileNotFoundException”。我想既然MyOwnException扩展了Exception,它就不应该抱怨


有人能告诉我这里缺少什么吗?

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

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
}
只有在
throws
子句中明确列出了异常类或超类时,才能抛出选中的异常
MyOwnException
不是
FileNotFoundException
的超类


为什么要这样做?

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

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
}
只有在
throws
子句中明确列出了异常类或超类时,才能抛出选中的异常
MyOwnException
不是
FileNotFoundException
的超类

为什么要这样做?

扩展树

  • 例外情况
    • IOException
      • FileNotFoundException
    • 肌细胞异常
FileNotFound和MyOwn彼此不认识

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
}
这条路怎么走

评论:

我希望这只是为了模型测试,而不是为了实现一个在常规源代码中使用wnt的类

扩展树

  • 例外情况
    • IOException
      • FileNotFoundException
    • 肌细胞异常
FileNotFound和MyOwn彼此不认识

public void ApplicationExceptionTest() throws Exception 
{ 
throw new FileNotFoundException(); 
}
这条路怎么走

评论:


我希望这只是为了模型测试,而不是为了实现一个在常规源代码中使用wnt的类

您是说ApplicationExceptionTest抛出MyOwnException。虽然MyOwnException扩展了异常,但这在这里并不重要,因为FileNotFoundException不扩展MyOwnException

如果这样做更简单,请尝试将异常替换为“Shape”,将FileNotFoundException替换为“Square”,将myowneexception替换为“Circle”。你是说你扔了一个圆,但实际上你扔了一个正方形。两者都是形状并不重要


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

您是说ApplicationExceptionTest抛出MyOwnException。虽然MyOwnException扩展了异常,但这在这里并不重要,因为FileNotFoundException不扩展MyOwnException

如果这样做更简单,请尝试将异常替换为“Shape”,将FileNotFoundException替换为“Square”,将myowneexception替换为“Circle”。你是说你扔了一个圆,但实际上你扔了一个正方形。两者都是形状并不重要


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

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

Java中的检查异常通常是一个坏主意,因为它常常导致“异常意大利面”。大多数现代框架都不使用checked exception——事实上,大多数框架都用unchecked exception来包装现有的遗留检查异常。

方法名称的Java约定是,它们应该以小写字母开头;e、 exceptionTest而不是exceptionTest。Java对方法名的约定是,它们应该以小写字母开头;e、 g.exceptionTest而不是exceptionTest.+1用于显示类层次结构@thomas_ds您提到您有Eclipse,所以您可以通过右键单击MyOwnException并选择“OpenTypeHierarchy”或F4来查看此树。在本例中,Exception和IOException都有许多其他子类。+1用于显示类层次结构@thomas_ds您提到您有Eclipse,所以您可以通过右键单击MyOwnException并选择“OpenTypeHierarchy”或F4来查看此树。在这种情况下,Exception和IOException都有许多其他子类。