《第6章异常处理.pptx》由会员分享,可在线阅读,更多相关《第6章异常处理.pptx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java程序设计(第二版)程序设计(第二版)杨厚群 主编第第6章章 异常处理异常处理错误是编程中不可避免和必须要处理的问题。编程人员和编程工具处理错误的能力在很大程度上影响着编程工作的效率和质量。如果程序在运行过程中发生了异常,那么系统就会以相应的错误消息终止程序的执行。如果因为程序的错误或者某些外部因素导致系统终止用户丢失数据,那程序就无法满足用户的需求。在程序发生异常时,程序应该能做到:通知用户程序出现了一个错误;保存全部工作;允许用户安全地退出程序。对于异常的情况,例如可能造成程序崩溃的错误输入,Java使用“异常处理”的错误捕获机制来进行处理。本章要点异常和异常类;检查和非检查异常;异
2、常处理;异常处理技巧;创建自己的异常类;综合应用示例。6.1 异常和异常类异常是指发生在正常情况以外的事件,如用户输入错误、除数为零、需要的文件不存在、文件打不开、数组下标越界、内存不足等。程序在运行过程中发生这样或那样的错误及异常是不可避免的。在设计程序时,要充分考虑到各种意外情况,不仅要保证应用程序的正确性,而且还应该具有较强的容错能力。这种对异常情况给予恰当的处理技术就是异常处理。计算机系统对于异常的处理通常有两种方法:一是计算机系统本身直接检测程序中的错误,遇到错误时终止程序运行。二是由程序员在程序设计中加入处理异常的功能。它又可以进一步区分为没有异常处理机制的程序设计语言中的异常处理
3、和有异常处理机制的程序设计语言中的异常处理两种。6.1 异常和异常类Java对异常的处理是面向对象的。在Java中,预定义了很多异常类,每个异常类都代表了相应的错误,当产生异常时,如果存在一个被异常类与此异常相对应,系统将自动生成一个异常类对象。所有的异常类都是从Throwable类派生而来的。Throwable类被包含在java.lang包中Exception类类说明说明ArithmeticException算术错误,如被0除ArrayIndexOutOfBoundException数组下标引用越界ArrayStoreException试图在数组中存放错误的数据类型FileNotFoundE
4、xception访问的文件不存在IOException输入、输出错误NullPointerException引用空对象NumberFormatException字符串和数字转换错误SecurityExceptionApplet程序试图执行浏览器不允许的操作OutOfMemoryException内存溢出StackOverflowException堆栈溢出StringIndexOutOfBoundsException试图访问字符串中不存在的字符6.2 已检查和未检查的异常Java语言规范将任何Error的子类以及RuntimeException的子类都称为未检查(unchecked)异常。而其他
5、的异常都被称为已检查(checked)异常。编译程序,当编译器或许无法确定是否发生诸如被0除或索引出界的异常时,因此,这些类型的异常(未检查异常)不会被编译器检查出。于是,为了提高程序的正确性,编程人员必须检查这些类型的异常。由于编译器不检查未检查异常,所以程序无须使用throws子句声明它们,也不需要在程序中提供代码来处理它们。属于RuntimeException类的子类的异常是未检查异常。如果程序中不提供代码处理未检查异常,那就由Java的默认异常处理程序来处理异常。6.3 异常处理异常处理是通过try、catch、finally、throw和throws语句来实现的。6.3.1 try-
6、catch-finally语句语句在大多数情况下,系统预设的异常处理方法只会输出一些简单的提示到控制台上,然后结束程序的运行。这样的处理方式在许多情况下并不符合我们的要求。try-catch-finally语句可以明确地捕捉到某种类型的异常,并按我们的要求加以适当的处理,这是充分发挥异常处理机制的最佳方式。try-catch-finally组合语句try-catch-finally组合语句用来实现抛出异常和捕获异常的功能,其一般语法格式如下:trystatement /可能发生异常的程序代码catch(ExceptionType1 objRef1)exception handling /处理异
7、常的程序代码1catch(ExceptionType2 objRef2)exception handling /处理异常的程序代码2catch(ExceptionTypeN objRefN)exception handling /处理异常的程序代码Nfinallyinally handling /无论是否发生异常都要执行的程序代码有关try-catch-finally语句的规定将可能出现错误的代码放在try块中,对try块中的程序代码进行检查,可能会抛出一个或多个异常。因此,try后面可跟一个或多个catch。如果try块中没有抛出异常,所有与try块相关的catch块将被忽略,程序在最后的c
8、atch块后继续执行。如果try块中抛出异常,try块中的剩余语句将被忽略。程序以它们在try块后显示的顺序搜索catch块,并查找适当的异常处理程序。如果抛出的异常类型与其中一个catch块中的参数类型相匹配,那就执行此catch块的代码,还可忽略这个catch块后面的剩余块。如果最后的catch块后面有finally块,则不管是否发生异常,都会执行finally块。finally块一般用来进行一些扫尾工作,如释放资源、关闭文件等。6.3.2 再次抛出异常在某些情况下,程序需要捕捉一个异常并且进行一些处理,但是却不能从根本上找到造成该异常的原因。需要调用那些处理错误的代码,然后再次调用thr
9、ow命令,重新抛出异常,使得异常重新回到调用链上。try/可能抛出的异常代码;catch(MalformedURLException e)throw e;6.4 异常处理技巧异常处理技巧在Java程序发生异常时,编程人员通常有几种选择:终止程序;从异常中恢复继续执行程序;或者记录错误并继续执行。flag=false;dotrySystem.out.print(“输入一个整数:”);number=Integer.parseInt(inText.getText();flag=true;catch(NumberFormatException ne)System.out.println(“n异常”+ne.toString();while(!flag);6.5 创建自己的异常类创建自己的异常类Java允许编程人员创建自己的异常类以处理Java的异常类未包含的异常。编程人员可以通过扩展Exception或其子类(比如IOException)来创建自己的异常类。创建自定义的除数为0时产生的异常类public class myException extends Exceptionpublic myException()super(“不能被0除”);public myException(String str)super(str);