您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第4章 异常处理 - 全
NCEPU第4章异常处理{openTheFile;determineitssize;allocatethatmuchmemory;read-filecloseTheFile;}为什么引入异常处理openFiles;if(theFilesOpen){determinethelengthofthefile;if(gotTheFileLength){allocatethatmuchmemory;if(gotEnoughMemory){readthefileintomemory;if(readFailed)errorCode=-1;elseerrorCode=-2;}elseerrorCode=-3;}elseerrorCode=-4;}elseerrorCode=-5;为什么引入异常处理程序可读性差,大量的错误处理代码混杂在程序中观察前面的程序,会发现大部分精力花在出错处理上只把能够想到的错误考虑到,此外的情况无法处理出错返回信息量太少,无法更确切的了解错误状况或原因为什么引入异常处理用异常的形式处理错误try{openTheFile;determineitssize;allocatethatmuchmemory;read-File;closeTheFile;}catch(fileopenFailed){dosomething;}catch(sizeDetermineFailed){dosomething;}catch(memoryAllocateFailed){dosomething;}catch(readFailed){dosomething;}catch(fileCloseFailed){dosomething;}finally{dosomething;}try里写我们尝试着要做的事情,每一个catch针对一种可能的错误每一个错误都有相应的处理办法,并且将实现功能(事务逻辑)与错误处理分开来4.1异常的概念错误(Error)程序在运行过程中发生的由硬件、操作系统、Java虚拟机等导致的严重问题,如内存溢出等。错误无法由程序本身解决,只能依靠外界干预,Java程序对错误一般不做处理。异常(Exception)有些问题通常不那么严重,应用程序可以自行恢复,如运算时除数为0,数据超出应有的范围,或者欲装入的类文件不存在等,这些问题称为异常。Java程序能够对异常进行处理,使程序继续运行或者平稳结束。运行时异常(RuntimeException)在运行时被检查的异常,如除数为0、数组下标越界等。这类异常一般由程序自身问题引起,产生比较频繁,可由系统进行检测并处理,配有缺省的异常处理程序。Java程序对这类异常可不做处理。检查型异常(CheckedException)程序中可预知的、常常由外部问题引起的异常,如打开文件时文件不存在、输入数据时类型不匹配等。检查型异常如果不处理就无法通过编译,也就无法执行。也称非运行时异常或编译时异常。异常的分类运行时异常实例classExceptionByZero{publicstaticvoidmain(Stringargs[]){inta;a=5/0;System.out.println(a);}}除数为0算术运算异常运行时异常运行结果importjava.io.*;publicclassExceptionRead{publicstaticvoidmain(String[]args){inta;a=(int)System.in.read();System.out.println(a);}}检查型异常实例4.2异常类异常用对象来表示异常类都派生自Throwable类Throwable类有两个直接子类Error类:代表错误,指的是程序本身无法恢复的意外情况,不要求程序进行处理。Exception类:代表异常,指的是程序本身可以处理的意外情况。Java中定义了很多异常类,类中包含了异常的信息和处理异常的方法等内容。ObjectThrowableErrorExceptionSSQLExceptionSQLExceptionRuntimeExceptionIOExceptionAWTErrorSQLException错误运行时异常检查型异常4.2异常类ObjectThrowableExceptionRuntimeExceptionIOExceptionIOErrorAWTErrorNullPointerExceptionIndexOutOfBoundsExceptionArithmeticExceptionClassCastExceptionFileNotFoundExceptionSocketExceptionErrorArrayIndexOutOfBoundsException4.2异常类ArithmeticException:算术异常,如除数为0,或用0取模时,会发生该异常。NullPointerException:空指针异常,当对象没有实例化就试图访问其成员时会发生该异常。ClassCastException:类型强制转换异常,进行强制类型转换时类型间不相容引发的异常。IndexOutOfBoundsException:索引超出范围异常,当元素的索引超出范围时引发的异常。ArrayIndexOutOfBandsException:数组下标越界异常,当数组元素的下标超出了数组长度允许的范围时发生该异常。IOException:输入输出异常,指输入输出数据时产生的异常。FileNotFoundException:文件未找到异常,当程序试图打开指定文件失败时,发生该异常。SocketException:Socket网络通信异常。常见的异常异常类(Exception)的常用方法getMessage()方法显示的异常信息/byzerotoString()方法显示的异常信息java.lang.ArithmeticException:/byzeroprintStackTrace()方法显示的异常信息java.lang.ArithmeticException:/byzeroatExceptionDemo.main(Demo.java:8)方法原型说明publicException()构造方法publicException(Stringmessage)构造方法publicStringgetMessage()返回当前异常对象的信息publicStringtoString()返回当前异常对象的信息publicvoidprintStackTrace()打印当前异常对象使用栈的轨迹异常处理机制捕获异常声明异常throwstry-catch-finally消极的处理方式积极的处理方式4.3捕获异常try{语句序列}catch(ExceptionType1e){语句序列}︙finally{语句序列}可能抛出异常或者受异常影响的语句序列要捕获的异常类型异常处理语句序列异常处理的统一出口,无论是否抛出异常,都要执行。捕获异常通过try-catch-finally语句进行。无论try块中是否抛出异常,finally块中的语句都会被执行。可以对程序的状态作统一的管理。finally语句对增强程序的鲁棒性非常重要。try块finally块catch块无异常抛出异常try-catch-finally语句执行流程4.3捕获异常publicclassApp4_1a{publicstaticvoidmain(String[]args){inta;a=5/0;System.out.println(a);}}publicclassApp4_1a{publicstaticvoidmain(String[]args){inta;try{a=5/0;System.out.println(a);}catch(ArithmeticExceptione){System.out.println(算术运算错误);}finally{System.out.println(程序运行结束);}}}算术运算错误程序运行结束Exceptioninthreadmainjava.lang.ArithmeticException:/byzeroatApp4_1a.main(App4_1a.java:4)try-catch-finally语句importjava.io.*;publicclassApp4_1b{publicstaticvoidmain(String[]args){inta;a=(int)System.in.read();System.out.println(a);}}importjava.io.*;classApp4_1b{publicstaticvoidmain(String[]args){inta;try{a=(int)System.in.read();System.out.println(a);}catch(Exceptione){System.out.println(输入异常);}finally{System.out.println(程序运行结束);}}}try-catch-finally语句多重catch块一个try块后可以跟多个catch块。当抛出异常时,按顺序查看每个catch块,并执行第一个异常类型相匹配的catch块。执行一个catch块后,其他的catch块将被忽略。try{…….}catch(ArrayIndexOutOfBoundsExceptione){……}catch(Exceptione){……}ObjectThrowableErrorExceptionSSQLExceptionSQLExceptionRuntimeExceptionIOExceptionAWTErrorSQLExceptioncatch(ArrayIndexOutOfBoundsExceptione)catch(IndexOutOfBoundsExceptione)catch(RuntimeExceptione)catch(Exceptione)IndexOutOfBoundsExceptionArrayIndexOutOfBoundsException多重catch块多重catch块try{……}catch(Exceptione){……}catch(ArrayIndexOutOfBoundsExceptione){……}×使用多重catch语句时,异常子类一定要位于异常父类之前。【例4-2】输出数组元素与下标相除的结果。importjava.util.Scanner;publicclassApp4_2{publicstaticvoidmain(Stringargs[]){inti=0,beginIndex,endIndex,a[]={1,2,3,4,5,6,7,8};Scannersc=newScanner(System.in);System.out.print(请输入数组元素的起止下标:);beginIndex=sc.nextInt();endIndex=sc.nextInt();for(i=beginIndex;i=endIndex;i++)System.out.println(a[+i+]/+i+=+(a[i]/i));System.out.println(结束!);}}多重catch块示例可能的异常try{beginIndex=sc.nextInt();endIndex=sc.nextInt();for(i=beginIndex;i=endIndex;i++)System.out.println(a[+i+]/+i+=+(a[i]/i));}catch(InputMismatchExceptione){System.out.println(“输入数据类型不匹配,要求输入整数);}catch(ArrayIndexOutOfBoundsExceptione){S
本文标题:第4章 异常处理 - 全
链接地址:https://www.777doc.com/doc-4048595 .html