第5章-异常处理.ppt_第1页
第5章-异常处理.ppt_第2页
第5章-异常处理.ppt_第3页
第5章-异常处理.ppt_第4页
第5章-异常处理.ppt_第5页
已阅读5页,还剩31页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上海大学CIMS和机器人中心,Java在工程中的应用,本科生课程:09326080,刘丽兰 2020年8月12日,第8周,回顾,类的多态性 重载和覆盖 抽象类和最终类 public abstract class ClosedFigure public abstract double area(); public abstract double perimeter(); 接口、内部类 public interface Area public abstract double area(); ,第5章 异常处理,5.1 程序错误与处理 5.2 Java的异常处理,异常的概念: 在进行程序设计时,错误

2、的产生是不可避免的,如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都要解决的问题。 所谓错误,是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。为了加强程序的鲁棒性,程序设计时,必须考虑到可能发生的异常事件并做出相应的处理。,5.1 程序错误与处理,什么情况下使用异常处理机制? 当方法因为自身无法控制的原因而不能完成其任务 文件不存在,网络连接无法建立 处理在方法、类库、类中抛出的例外 如FileInputStream.read产生IOException 在大的项目中采用统一的方式处理错误时 如编写一个

3、文字处理器 异常应该是不经常发生但却可能发生的故障 一定发生的事件不应该用异常机制来处理 异常处理用于使系统从故障中恢复 提示信息/不产生无效的结果/释放资源,5.1 程序错误与处理,异常处理机制的优点: 从语法上看,异常处理语句将程序正常代码与错误处理代码分开,使程序结构清晰,算法重点突出,可读性强。 从运行效果看,异常处理语句使程序具有处理错误的能力。即使发生了运行错,应用程序能够捕获异常并即使处理异常,使程序从运行错误中很好地恢复并继续运行,而不会导致程序运行非正常终止。,异常处理是捕获和处理运行时错误的一种机制,5.1 程序错误与处理,5.1 程序错误与处理,Java的错误和异常 错误

4、与异常 按照错误性质,Java将运行时错误分为:错误和异常。 错误(error)指程序运行时遇到的硬件或操作系统的错误,如:内存溢出、虚拟机错误等。 错误对程序而言是致命性的, 错误将导致程序无法运行,程序本身不能处理错误。 异常(exception)指在硬件和操作系统正常时,程序遇到的运行错。如:除数为0、数组越界等。 异常对于程序而言是非致命性的,虽然异常会导致程序非正常终止,但Java的异常处理机制使程序自身能够捕获和处理异常,使程序仍可继续运行。,5.1 程序错误与处理,Java的错误和异常,Java程序发现错误和异常:,5.1 程序错误与处理,Java的错误和异常 错误类和异常类 E

5、rror类 由Java虚拟机生成并抛出给系统,有内存溢出错误、动态链接错误等。 Exception异常类 是Java程序捕获和处理的对象。异常对象中包含错误的位置和特征信息。 除数为0的算术异常、数组下标越界异常、空指针异常等。,5.1 程序错误与处理,Java的错误和异常 程序对错误与异常的三种处理方式 程序不能处理错误由系统处理,Java程序本身不能对错误进行处理。 程序应避免而不捕获的异常程序能够预见的异常,如除数为0、数组下标越界等,程序应该考虑周全进行事先处理,尽量避免发生异常。 必须捕获的异常程序无法预见的、由特殊环境错误造成的异常,如:文件未找到、网络通信失败等,必须进行捕获和处

6、理。,5.1 程序错误与处理,错误类和异常类层次结构:,5.1 程序错误与处理,Java的错误和异常 例: P152,【例5.2】 发现数组下标越界的语义错。 public class Outofbounds public static void main(String args) int a=1,2,3,4; for(int i=0;i5;i+) System.out.println(“ a ”+i+ “=”+ai); 结果: Exception in thread “main” java.lang.ArrayIndexOutOfBounds Exception:4 at Outofboun

7、ds.main(Outofbounds.java:7),5.2 Java的异常处理,Java的异常处理机制包括: 异常类体系 异常处理的try语句 抛出自定义异常对象的throw语句 声明方法抛出异常的throws子句,5.2 Java的异常处理,异常类说明 Exception异常类 Exception类的父类Throwable部分声明: public class Throwable implements Serializable private String detailMessage; /异常信息描述 public Throwable() public Throwable(String m

8、essage) public String getMessage() /获得异常信息 public String toString() /获得异常对象的描述信息 public void printStackTrace() /显示异常栈跟踪信息 ,5.2 Java的异常处理,异常类说明 Exception异常类 异常类Exception类只声明了若干构造方法: public class Exception extends Throwable public Exception() public Exception(String s) 从父类Throwable中继承了成员变量和成员方法。,5.1 程

9、序错误与处理,RuntimeException 异常类说明 Java异常类主要分为运行异常和非运行异常。运行异常由程序本身错误引发的异常,可以避免。 算术异常ArithmeticException:除数为0 空对象异常NullPointerException int a = null; a0 = 1; /对空数组中的元素进行操作,产生空对象异常 类型强制转换异常ClassCastException Object obj = new Object(); String str = (String) obj;,5.1 程序错误与处理,RuntimeException 异常类说明 负数组长度异常Neg

10、ativeArraySizeException int a = new int -1;/产生负数组长度异常 数组下标越界异常ArrayIndexOutOfBoundsException int a = new int1; a1 = 1;/产生数组下标越界异常 数值格式异常NumberFormatException 将字符串转换成整数时有可能发生。 int i=Integer.parseInt(“123”); /正确,不产生异常 int j = Integer.parseInt(abc); /产生数值格式异常,异常处理机制的关键字: try 定义可能产生异常的代码段 catch (Etype e

11、) 用于捕获一个异常 finally 用于做统一的事后处理,如释放资源 throw e; 用于抛出一个异常 throws Etype1, Etype2 用于声明方法可能抛出的异常类型,throw / throws try-catch-finally,5.2 Java的异常处理措施,5.2 Java的异常处理措施,异常处理语句 异常处理语句语法:try-catch-finally try 语句1 /存在潜在异常的代码 catch (异常类 异常对象) 语句2 /捕获到异常并进行处理的代码 finally 语句3 /最后必须执行的代码,无论是否捕获到异常 try、catch、finally为关键字

12、。catch子句可以有一个或多个,但至少要有一个catch子句,finally子句可以省略。,5.2 Java的异常处理措施,举例: String str=“123”; try int i = Integer.parseInt (str);/调用声明抛出异常的方法 Catch (NumberFormatException e) /捕获parseInt()方法声明的异常对象 System.out.println (str+ “字符串不能转换为整数”); Catch (Exception e) /捕获所有异常对象 e.printStackTrace();/显示异常栈跟踪信息 ,5.2 Java的异

13、常处理措施,异常处理语句,异常处理语句的执行流程,多个catch语句需按异常类从子类到父类的次序依次排列。,5.2 Java的异常处理措施,public class Try2 public static void main (String args) int i=0; int a=5,6,7,8; for (i=0;i5;i+) try System.out.print(“a”+i+ “/”+i+ “=”+(ai/i); catch (ArrayIndexOutofBoundsException e) System.out.print(“捕获数组下标越界异常!”); catch(Arithme

14、ticException e) System.out.print(“捕获算术异常!”); catch(Exception e) System.out.print(“捕获”+e.getMessage()+ “异常!”); finally System.out.println(“ i=”+i); System.out.println(“继续!”); ,程序运行结果: 捕获算术异常! i0 a1/1=6 i=1 a2/2=3 i=2 a3/3=2 i=3 捕获数组下标越界异常! i4 继续!,public class ExceptionDemo public static void main(Str

15、ing args) try FileInputStream fis = new FileInputStream(test1.txt); int b; while( (b=fis.read()!=-1 ) System.out.print(b); fis.close(); catch(FileNotFoundException e) catch(IOException e) ,catch(IOException e) catch(FileNotFoundException e) /永远不会被执行 ,5.2 Java的异常处理措施,抛出异常 throw 异常对象 throw是关键字,是程序创建的指

16、定异常类对象。 由throw语句抛出的异常也必须由try语句捕获并处理。,5.2 Java的异常处理措施,抛出异常 例: public void set(int age) if (age0 问题: 当调用set()方法时,如果实际年龄不合适,则set()方法将age设置为0。,public void set(int age) try if (age0 ,5.2 Java的异常处理措施,抛出异常 throws语句:不想处理或不能处理异常 修饰符 返回值类型 方法(参数列表) throws 异常类 throws是关键字,是方法要抛出的异常类,可以声明多个异常类,用逗号隔开。 throws子句的作用

17、:声明方法抛出指定异常,方法的调用者必须捕获并处理该指定的异常,实现了异常对象在方法之间的传递。,5.2 Java的异常处理措施,public void set(int age) throws Exception try if (age0 /抛出异常 ,5.2 Java的异常处理措施,例如: 1)一个声明了抛出异常的类: public static int parseInt(String s) throws NumberFormat Exception 2)调用该类,必须使用try语句捕获并处理 try tempcount=Integer.parseInt(stri); count+; cat

18、ch (NumberFormatException e) System.out.println(“字符串”+stri+ “不能转换为整数,产生的异常类是” + e.getClass().getName(); 阅读 P163,【例5.6】 声明抛出异常的方法与方法调用者处理异常,5.2 Java的异常处理措施,自定义异常类 当Java提供的异常类不能满足需求时,可以自定义异常类。 自定义的异常类应该是Exception的子类,5.2 Java的异常处理措施,例: public class IllegalAgeException extends Exception /无效年龄异常类 public IllegalAgeException(String s) super(s); public IllegalAgeException() this(“ ”); ,5.2 Java的异常处理措施,public void set(int age) throws IllegalAge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论