第十一章异常处理 课程内容:异常与异常类型、处理异常、 finally子句、使用异常的警告、创建自己的 异常类 ■授课时间:2006/06/01 ■ 教学目标:了解Java的异常机制;学习如何在 程序运行期间产生异常前找到代码中的bug, 以及相关的小技巧 重点:处理错误、捕获异常、使用异常的一些 技巧 ■手 教学方法:讲授 ■教学过程:(省略) ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 课程内容: 异常与异常类型、处理异常、 finally子句、使用异常的警告、创建自己的 异常类 授课时间:2006/06/01 教学目标:了解Java的异常机制;学习如何在 程序运行期间产生异常前找到代码中的bug, 以及相关的小技巧 重点:处理错误、捕获异常、使用异常的一些 技巧 教学方法:讲授 教学过程:(省略) 第十一章 异常处理
处理错误 目标:返回到安全状态并且允许用户执行其 他命令 或者允许用户保存其工作并平缓终止该程序 无法完成的任务 程序控制权由错误地转移至错误处理器 错误的种类:用户输入错误、设备错误、物 理限制、代码错误等 异常发生时,抛出一个封装了错误信息的对 象,异常处理机制搜索相应的异常处理器对 该错误进行处理 ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 处理错误 目标:返回到安全状态并且允许用户执行其 他命令 或者允许用户保存其工作并平缓终止该程序 无法完成的任务 程序控制权由错误地转移至错误处理器 错误的种类:用户输入错误、设备错误、物 理限制、代码错误等 异常发生时,抛出一个封装了错误信息的对 象,异常处理机制搜索相应的异常处理器对 该错误进行处理
异常和异常类型 ClassNotFoundException IOException ArithmeticException Exception AWTException NullPointerException RuntimeException IndexOutOfBoundsExceptior Object Throwable Several more classes Several more classes LinkageError VirtualMachineError Error AWTError Several more classes ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 异常和异常类型 LinkageError Error AWTError AWTException Throwable ClassNotFoundException VirtualMachineError IOException Exception RuntimeException Object ArithmeticException NullPointerException IndexOutOfBoundsException Several more classes Several more classes Several more classes
异常的分类 任何异常对象总是Throwable类的实例 两个分支:Errori和Exception ©2006计算机系杨群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 异常的分类 任何异常对象总是Throwable类的实例 两个分支:Error和Exception
异常的分类(cont.) Eror类描述内部错误以及资源耗尽的情况,应用程 序不应该抛出此类型的对象 Exception类的两个分支:RuntimeException的子类, 以及不从它衍生的其他异常 从RuntimeException衍生出来的异常包括: ·错误的类型转换 ·数组越界访问 ·试图访问一个空指针 不是从RuntimeException衍生出来的异常包括: ·试图从文件尾后面读取数据 ·试图打开一个错误格式的UL ·试图构造一个不存在的类 ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 异常的分类(cont.) Error类描述内部错误以及资源耗尽的情况,应用程 序不应该抛出此类型的对象 Exception类的两个分支:RuntimeException的子类, 以及不从它衍生的其他异常 从RuntimeException衍生出来的异常包括: • 错误的类型转换 • 数组越界访问 • 试图访问一个空指针 不是从RuntimeException衍生出来的异常包括: • 试图从文件尾后面读取数据 • 试图打开一个错误格式的URL • 试图构造一个不存在的类
异常的分类(cont.) “如果出现RuntimeException,则一定是你的 错误” Error的子类以及RuntimeException[的子类称 为末检查(unchecked)异常 其他的异常都被称为已检查(checked)异常 ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 异常的分类(cont.) “如果出现RuntimeException,则一定是你的 错误” Error的子类以及RuntimeException的子类称 为未检查 (unchecked)异常 其他的异常都被称为已检查(checked)异常
声明、抛出和捕获异常 methodl() 4444444444444444 method2 ( throws Exception claim exception if (an error occurs) try catch exception throw new Exception(); throw exception invoke method2; } catch (Exception ex) Process exceptio; ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 声明、抛出和捕获异常 method1() { try { invoke method2; } catch (Exception ex) { Process exception; } } method2() throws Exception { if (an error occurs) { throw new Exception(); } } catch exception throw exception claim exception
声明异常 public void myMethod() throws IOException public void myMethod() throws IOException,OtherException ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 声明异常 public void myMethod() throws IOException public void myMethod() throws IOException, OtherException
抛出异常 throw new TheException(); TheException e new TheException(; throw e; ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 抛出异常 throw new TheException(); TheException e = new TheException(); throw e;
抛出异常的例子 public Rational divide (Rational r)throws Exception { if (r.numer ==0) { throw new Exception(denominator cannot be zero"); } long n numer*r.denom; long d denom*r.numer; return new Rational(n,d); ©2006计算机系杨厚群 All rights lefts reserved
©2006 计算机系 杨厚群 All rights & lefts reserved. 抛出异常的例子 public Rational divide(Rational r) throws Exception { if (r.numer == 0) { throw new Exception("denominator cannot be zero"); } long n = numer*r.denom; long d = denom*r.numer; return new Rational(n,d); }