当前位置: 首页 > 面试题库 >

Java中的异常和继承

督劲
2023-03-14
问题内容

假设我们有这个问题

public class Father{
    public void method1(){...}
}

public class Child1 extends Father{
    public void method1() throws Exception{
    super.method1();
    ... 
    }

}

Child1扩展Father和覆盖,method1但鉴于实现Child1.method1现在会引发异常。由于覆盖方法不能引发新的异常,因此不会编译。

最好的解决方案是什么?

  • 将所需的异常传播到Father。对我来说,这是反对封装,继承和一般OOP的(Father可能会引发永远不会发生的异常)。
  • 使用RuntimeException呢?此解决方案不会将传播ExceptionFather,但是Oracle文档和其他来源指出,当“客户端代码无法执行任何操作”时,应使用异常类。并非这种情况,此异常将对恢复blablabla有用(为什么使用错误的用法RuntimeException呢?)。
  • 其他..

问题答案:

使用RTE并不是一个坏主意。这是Spring框架的方法,效果很好。如果您要实现应用程序,则可以使用此解决方案。

但是,如果您正在实现公开API
IMHO的库,则应使用已检查的异常。在这种情况下,您应该创建自己的异常,例如BaseException。法method()Father将它扔。子类的定义ChildException extends BaseException和声明method1()将其抛出。

这不会破坏封装:基类抛出基异常。它对具体异常一无所知。子类抛出具体的异常,但是该异常扩展了基本异常,因此可以被客户端代码视为基本异常。

举个例子,我可以给你IOExceptionFileNotFoundException然后扩展它。您可以在输入流捕获并抛出IOException时使用输入流捕获。但是客户不知道这一点。抓住了。FileInputStream``FileNotFoundException``IOException



 类似资料:
  • 在我正在编写的程序中,我有以下代码来为单词创建正则表达式并从一系列不同的ArrayList中检索与之匹配的所有单词。 当我从另一个类调用求解(String str)时,行"strArr=str.split (""); 抛出一个空指针异常。我遇到的另一个问题是,当我自己测试这个类时,行if(temp.matches(reg))给出了以下错误。 有人能帮忙吗?

  • 这是链接中问题的继续:我正在学习java中的异常处理(基本上是在继承中),子类方法必须抛出异常,该异常是父类方法的子类。 “当子类重写超类中的方法时,子类方法定义只能在父类方法(或重写方法)的throws子句中指定异常类的所有或子集” 这是一条规则。但我不知道制定这条规则的原因是什么,为什么不允许反之亦然。为什么要创建此规则

  • 可以从共用基类派生各种异常类。如果 catch 捕获基类类型异常对象的指针或引用,则也可以捕获该基类所派生的异常对象的指针或引用。这样允许相关错误的多态处理。 调试与调试提示 13.2 利用异常继承使异常处理器可以用相当简单的符号捕获相关错误。虽然可以捕获每个派生类异常对象的指针或引用,但更简练的方法是捕获基类异常对象的指针或引用,另外.如果程序员忘记测试一个或几个派生类指针或引用,则捕获每个派生

  • 问题内容: 我正在尝试引发异常(不使用try catch块),并且程序在引发异常后立即完成。有没有一种方法可以在我引发异常之后继续执行程序?我抛出了在另一个类中定义的InvalidEmployeeTypeException,但是我希望程序在抛出该异常后继续执行。 问题答案: 试试这个:

  • 问题内容: (我是Java新手)…我想在HashMap中存储一些类字段值,然后将其写入文件(路径作为参数传递),然后还原HashMap并获取所需的信息。在名为Carte的构造函数中,我遇到一个异常,即找不到文件,无论如何它都位于正确的位置,保存的数据位于我的xml文件中。关于这一点的任何想法 发生了一个异常:java.io.FileNotFoundException:users / stefan

  • 问题内容: (我是Java新手)…我想在HashMap中存储一些类字段值,然后将其写入文件(路径作为参数传递),然后还原HashMap并获取所需的信息。在名为Carte的构造函数中,我遇到一个异常,即找不到文件,无论如何它都位于正确的位置,保存的数据位于我的xml文件中。关于这一点的任何想法 发生了一个异常:java.io.FileNotFoundException:users / stefan