`

子类为何不能捕获基类的异常?

    博客分类:
  • Java
 
阅读更多

通常创建子类对象的时候,先会自动创建基类对象。

而如果显式调用基类构造函数时,必须放在构造函数里的第一行。所以,就没有办法捕获到基类构造函数的异常了。以下为示例代码:

 

class BaseException extends Exception {}


class Base {
    Base() throws BaseException {
        throw new BaseException();
    }
}



class Derived extends Base {
    // BaseException must be caught (no way) or
    // declared to be thrown:
    Derived() throws BaseException {
        super();

        // not this way, 'catch' without 'try' not allowed:
        // catch(BaseException e) {}
        // not this way either, because call to super
        // must be first statement in constructor:        
        // try {
        //    super();
        // } catch(BaseException e) {}
    }
}



public class Ex21 {
    public static void main(String[] args) {
        try {
            Derived d = new Derived();
        } catch(BaseException e) {
            System.out.println("BaseException caught in main()");
        }
    }
}
分享到:
评论

相关推荐

    关于Python中异常(Exception)的汇总

    python中的异常使用继承结构创建,可以在异常处理程序中捕获基类异常,也可以捕获各种子类异常,python中使用try…except语句捕获异常,异常子句定义在try子句后面。 Python中的异常处理 异常处理的语句结构 try:...

    【09-异常处理】

    不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。 异常的捕捉流程 Java的异常体系 访问异常信息 •如果程序需要在catch块中访问异常对象的相关信息,可以通过...

    JAVA经典基础面试题及答案.docx

    抽象类是一种不能被实例化的类,它只能被用来作为其他类的基类。抽象类可以包含抽象方法和非抽象方法,但是至少有一个抽象方法。 什么是接口? 接口是一种抽象类型的实现,它定义了一组方法的签名,但是并没有具体...

    Java面试问题带答案40道.docx

    答:抽象类是一种不能被实例化的类,只能作为其他类的基类。它可以包含抽象方法,用于定义子类必须实现的方法。 4. Java中什么是接口? 答:接口是一种与具体实现无关的规范,其中只包含了方法的声明而没有实现。它...

    Java异常发生时程序的执行顺序

    一些基础知识:  1.try代码段包含可能产生例外的代码;...在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。  看一个例子:   /** * @author Lansine *

    ruby-pitfalls:编写 ruby​​ 代码时的语言陷阱列表

    Ruby陷阱 编写 ruby​​ 代码时不断发展的...如果子类定义了一个与基类名称相同但签名不同的方法(参数较少),则调用“super”来调用基类的方法将不会传递缺少参数的信息。 {} 和 do..end 不等价 花括号 {} 比 do..end

    java 异常总结

    其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部...

    java课程设计报告-五子棋(1).doc

    、异常处理机制 异常处理机制:当try子句中抛出的异常属于某个catch子句的异常类时,该catch子句 捕获到异常,并且系统自动将异常类的实例传递给catch子句的异常类对象。在catch子 句中,可以从异常类对象中获取...

    java课程设计报告-五子棋.doc

    、异常处理机制 异常处理机制:当try子句中抛出的异常属于某个catch子句的异常类时,该catch子句 捕获到异常,并且系统自动将异常类的实例传递给catch子句的异常类对象。在catch子 句中,可以从异常类对象中获取...

    java课程设计报告-五子棋(2).doc

    、异常处理机制 异常处理机制:当try子句中抛出的异常属于某个catch子句的异常类时,该catch子句 捕获到异常,并且系统自动将异常类的实例传递给catch子句的异常类对象。在catch子 句中,可以从异常类对象中获取...

    net学习笔记及其他代码应用

    接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它...

    Java程序员面试宝典

    1.面向对象的特征有哪些方面 (1).抽象:抽象就是忽略一个主题中与当前目标 无关的那些方面, 以便更...java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 ……

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

    基于对话框程序中让对话框捕获WM_KEYDOWN消息的实现方法

    某些特定的消息,例如按键消息,它们被Windows内部的对话框过程处理了(即在基类中完成了处理,有兴趣的读者可以查看MFC的源代码),或者被发送给子控件进行处理,所以我们在对话框类中就捕获不到按键的消息了。...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    JAVA面试题最全集

    修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被...

    java面试笔试题大汇总

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法...

    Python-3.8.0b2.tgz

    当Python解释器被Ctrl-C(SIGINT)中断并且KeyboardInterrupt未捕获到的结果异常时,Python进程现在通过SIGINT信号或正确的退出代码退出,以便调用进程可以检测到它因Ctrl而死亡-C。POSIX和Windows上的shell使用它来...

    Python-3.8.0a3.tgz

    当Python解释器被Ctrl-C(SIGINT)中断并且KeyboardInterrupt未捕获到的结果异常时,Python进程现在通过SIGINT信号或正确的退出代码退出,以便调用进程可以检测到它因Ctrl而死亡-C。POSIX和Windows上的shell使用它来...

    python-3.8.0a4.exe

    当Python解释器被Ctrl-C(SIGINT)中断并且KeyboardInterrupt未捕获到的结果异常时,Python进程现在通过SIGINT信号或正确的退出代码退出,以便调用进程可以检测到它因Ctrl而死亡-C。POSIX和Windows上的shell使用它来...

Global site tag (gtag.js) - Google Analytics