一、异常的基本概念1) 异常事件改变程序流程; 2) 当一个异常事件发生时,一个异常被抛出; 3) 响应处理异常的代码被称为exception handler; 4) exception handler捕获异常; 5) 异常处理能让你集中精力在一个地方解决问题,然后将处理错误的代码分开来放在另一个地方。 二、捕获异常1) 设置一个try/catch的代码块; 2) 如果try块内的任何代码抛出了由catch子句指定的异常,则 a. 程序跳过try块中的其他代码; b. 程序执行catch从句中的处理器代码。 3) 如try块内没有抛出异常,直接跳过catch从句内容。 4) 如try块内抛出的异常没有在catch从句中指定, 则该方法会立即退出。 三、处理异常1.如何控制try的范围:根据操作的连动性和相关性,如果前面的程序代码块抛出的错误影响了后面程序代码的运行,那么这个我们就说这两个程序代码存在关联,应该放在同一个try中。 对已经查出来的例外,有throw(消极)和try catch(积极)两种处理方法。 对于try catch放在能够很好地处理例外的位置(即放在具备对例外进行处理的能力的位置)。如果没有处理能力就继续上抛。 当我们自己定义一个例外类的时候必须使其继承excepiton或者RuntimeException。 3) 对子类方法抛出的异常不能超出父类方法throws指令的范围。如父类方法不抛出任何异常,在子类方法中必须捕捉每一个“已检查异常”。 四、捕捉多个异常1) 每个异常类型使用一个catch从句; 2) 如前面catch从句捕获异常,将直接跳过后面catch从句内容; 3) 建议按异常类型的子类->超类的顺序排列catch从句的先后顺序。 五、finally 声明无论是否捕获异常,都会执行finally从句中的代码; 例子:
六、 异常调用栈1. 哪个方法调用的代码发生异常,返回到调用方法的地方; 2. main方法调用的代码发生异常,返回到虚拟机。 七、 异常层次答:1) 起源于Error的类代表不常用的环境(通常是硬件层面); 2) 应用程序不能够从Error中恢复正常; 3) 所有的Java异常都起源于Exception; 4) RuntimeExcepiton也称为未检查异常; 5) 未检查异常无须捕获; 6) 其它异常,也称为检查异常,必须处理 Object ↑ Throwable ↑ |ˉˉˉˉˉˉˉˉ| Error Exception | ↑ | |ˉˉˉˉˉˉˉ| RuntimeException 八、 一些未检查的异常答:1) java.lang.ArithmeticException 如:除0; 2) java.lang.NullPointerException 如:没初始化一个References便使用; 3) java.lang.ArrayIndexoutofBoundsException 如:调用一个有十个元素的Array的第十一个元素的内容; 4) java.lang.NumberFORMatException 如:Integer.parseInt("a"); 九、 写你自己的异常答:1) 要做的仅仅是从Exception继承或者是从Exception的一个子类衍生出自己需要的类就可; 2) 习惯为每一个异常类提供一个默认的构造器以及一个包含详细信息的构造器。 十、 抛出你自己的异常答:1) 在方法的定义中增加一个throws修饰符,以通知调用者可能会抛出一个异常; 2) 在方法中构造一个该类的实例,然后抛出该实例。 |
|
来自: zhulin1028 > 《待分类》