• MOOC 浙江大学 面向对象程序设计-Java笔记(7)


    ------------翁恺老师授课
    第七次课程 异常

    异常处理:考虑可能发生的异常事件并做出相应处理,无论如何处理,再也无法回到发生异常的程序处了。

    异常

    异常类

    每一个异常是一个对象,异常对象中包含发生异常的信息。异常发生并不意味着程序要终止,需要找到一个合适的地方处理这些异常。若异常在深层调用中已被处理,不会返回退出,可继续执行异常处理结束处之后的语句。

    class 异常类{
    	...
    	方法1:getMessage //第多少行抛出的
    	方法2:toString //异常类具体信息
    	方法3:printStackTrace   //调用栈
    	...
    }
    
    class Throwable{}
    class Exception extends Throwable{}
    class 自定义 extends Exception{}
    

    Exception类非常常见

    • RuntimeException类:不处理,虚拟机捕获此类异常抛出的对象后停止程序的运行。
    • 非RuntimeException类:程序必须处理。

    异常处理

    • 一个方法的运行过程发生了异常,则该方法生成代表该异常的一个对象,并将它交给运行时的系统,运行时系统会寻找相应的代码(见第2幅图)来处理发生的异常。
    • 捕获相应异常后,发现无法处理可再度抛出。
      图1
      图2

    异常机制

    1. 抛出异常

    • 并不是任何事物都可以抛出,只能抛出继承了Throwable类的子类的对象或Exception类的对象。
    • 若某一方法体中确定抛出了某种异常,有2种不同的处理方案
      (1)在该方法体的申明处说明方法产生异常,则是此异常类型(这说明在该方法体内是不会捕捉处理此类异常的,提醒调用该方法的上级中处理此类异常)。
    public void test() throws 异常类型A{
    	....
    	....
    	throw new 异常类型A();//其构造函数可带参数
    }
    

    (2)在当前方法体内处理此类异常

    public void test(){
    	...
    	...
    	try{
    		...
    		throw new 异常类型A();
    		...
    	}catch(异常类型A及其父类){
    		处理...
    	}
    }
    
    

    2. 异常匹配

    • 抛出子类异常会被捕捉父类异常的catch捕捉到。

    • catch捕捉的异常类型离try由近到远分别是从子类到父类再到超类

    3. 异常申明遇到继承关系

    • 当子类覆盖一个父类中的函数时,子类不能申明抛出比父类的版本更多的异常。(基于多态特性,且父类定义的变量在接受子类的对象时,处理的异常类型是由父类决定(编写程序时),若有父类异常以外的异常无法被处理)
    • 在子类的构造中,必须申明父类可能抛出的全部异常。(基于父类构造器先于子类构造器被调用)
  • 相关阅读:
    qt映射器QSignalMapper的理解
    win10环境下安装Qt4.8、PyQt及development tools
    BZOJ1040 基环森林 找环+基础树形DP
    贪心 BZOJ1034
    HDU5293 树链剖分+树形DP
    BZOJ 1028 BZOJ 1029 //贪心
    BZOJ1025
    仙人掌图判定及求直径HDU3594 BZOJ1023
    BZOJ1021
    BZOJ1022
  • 原文地址:https://www.cnblogs.com/yuecheng/p/12728097.html
Copyright © 2020-2023  润新知