您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > JAVA应用基础 第五章 异常处理
第6章异常处理下一页上一页返回开始java中的异常处理2主要内容Case:TryCatchDemo.java6.1异常处理概述什么是异常为何采用异常处理6.2异常的分类与层次6.3异常的处理机制对异常处理的进一步讨论作业下一页上一页返回开始java中的异常处理36.1异常处理概述6.1.1什么是异常异常就是在程序的运行过程中所发生的意外事件,它中断指令的正常执行。Java中提供了一种独特的处理异常的机制,通过异常来处理程序设计中出现的错误。异常≠错误下一页上一页返回开始java中的异常处理46.1异常处理概述认识Java中的错误语法错误运行错误逻辑错误下一页上一页返回开始java中的异常处理56.1异常处理概述认识Java中的错误语法错误:由代码结构中的问题引起如:拼错关键字,丢掉标点符号等。publicclassShowSyntexErros{publicstaticvoidmain(String[]args){i=30;System.out.print(i+4);}}下一页上一页返回开始java中的异常处理66.1异常处理概述认识Java中的错误运行错误:引起程序非正常中断的错误如:输入错误,除零等。publicclassShowRuntimeErros{publicstaticvoidmain(String[]args){inti=1/0;}}下一页上一页返回开始java中的异常处理76.1异常处理概述认识Java中的错误逻辑错误:程序没有按照期望的要求执行原因多种多样。publicclassShowLogicErros{publicstaticvoidmain(String[]args){intnumber1=3;intnumber2=3;number2+=number1+number2;System.out.println(“number2is”+number2);}}下一页上一页返回开始java中的异常处理86.1异常处理概述认识Java中的错误语法错误:编译器指出错误的位置和原因运行错误:JVM定位错误逻辑错误:调试下一页上一页返回开始java中的异常处理96.1.2为何使用意外处理:把出错处理和正常代码分开。比如有程序是处理文件,大家看流程,这个流程中充满了错误可能。readFile{打开文件;打不开咋办?判断大小;大小判断失败怎么办?(磁带)分配内存;内存不够读入内存;文件读不出来关掉文件;文件关不掉。。}解决方法:写大量的if语句。。下一页上一页返回开始java中的异常处理10传统的错误检测和纠正errorCodeTypereadFile{initializeerrorCode=0;①打开文件;if(打开文件成功){②判断文件长if(文件长取到){③分配内存if(分内存成功){④读入内存if(读文件失败){errorCode=-1;}//读文件判断}else{errorCode=-2;}//分配内存失败}else{errorCode=-3;}//取不到文件长⑤关闭文件;if(文件没关&&errorCode==0){errorCode=-4;}else{errorCode=errorCodeand-4;}}else{errorCode=-5;}returnerrorCode;}下一页上一页返回开始java中的异常处理11从上面的流程可看出真正有用的代码不多,就五条而已,其它全部是判断错误用的,主要逻辑都被错误处理代码混得看不清了,程序可读性差,出错返回信息量太少。在Java中,处理这种情况的方法是利用异常处理,把出错处理和正常代码分开,Java异常处理通过5个关键字try,catch,finally,throw和throws进行管理。下一页上一页返回开始java中的异常处理12Java的解决方式readFile{//结构清楚,无需自己判断,代码量小。try{打开文件;判断大小;分配内存;读入内存;关掉文件;}catch(文件打开失败){处理代码;}catch(大小取不到失败){处理代码;}catch(内存分配失败){处理代码;}catch(读取失败){处理代码;}catch(文件关闭失败){处理代码;}}下一页上一页返回开始java中的异常处理136.2异常类的分类与层次6.2.1异常类的层次结构在jdk中,每个包中都定义了异常类,而所有的异常类都直接或间接地继承于java.lang.Throwable类。当Java程序遇到不可预料的错误时,会实例化一个从Throwable类继承的对象。java中的异常类可分为两大类:◇Error:错误Error类指的是系统错误或运行环境出现的错误,这些错误一般是很严重的错误,即使捕捉到也无法处理,由Java虚拟机生成并抛出,包括系统崩溃、动态链接失败、虚拟机错误等,在Java程序中不做处理。◇Exception:异常Exception类则是指一些可以被捕获且可能恢复的异常情况,是一般程序中可预知的问题。对于异常可分为两类:(1)运行时异常:程序中可以不做处理,直接由运行时系统来处理。(2)非运行时异常:在程序中必须对其进行处理,否则编译器会指出错误。下一页上一页返回开始java中的异常处理14异常类的结构层次java.langThrowableExceptionErrorObjectRuntimeExceptionSQLExceptionNoSuchFieldExceptionNoSuchMethodExceptionInterruptedExceptionjava.sqlEOFExceptionjava.ioClassNotFoundExceptionInstantiationExceptionArithmeticExceptionArraystoreExceptionNullPointerExceptionIndexOutOfBoundsExceptionCloneNotSupportedExceptionIllegalAccessExceptionIOExceptionFileNotFoundExceptionDataTruncationSQLWarning下一页上一页返回开始java中的异常处理156.2.2Exception类1.Exception类的构造方法Exception类有两种构造方法:Exception():没有指定的消息串,直接构造一个Exception。Exception(Stringexp):根据参数提供的消息串,创建一个Exception。例如,创建一个异常对象:ExceptionmyExp=newException(“异常!”);下一页上一页返回开始java中的异常处理162.常用方法Exception类的方法均继承自Throwable类,可以为程序提供一些有关异常的信息,常用方法如下:StringgetMessage():返回该异常所存储的描述性字符串。StringtoString():返回异常对象的详细信息,包含该类名和指出所发生问题的描述性消息的字符串。voidprintStackTrace():将异常发生的路径,即引起异常的方法调用嵌套序列打印到标准错误流。例如:System.out.println(myExp.getMessage());此语句可以将异常对象myExp的异常信息描述打印输出,在屏幕上显示“异常!”。下一页上一页返回开始java中的异常处理176.2.3自定义异常类在程序中,可以创建自定义的异常类。用户自定义的异常类都要直接或间接地继承Exception类。可按照下面的方法自定义一个异常类:(1)创建一个继承Exception类或者其它已存在的异常类的子类。(2)在该类中创建一个默认的无参数构造方法,该构造方法以适当的错误消息作为输入,调用它的超类的构造方法。(3)再增加一个带字符串参数的构造方法,该构造方法以适当的错误消息作为输入(还包括输入的字符串)来调用其超类相应的构造方法。下一页上一页返回开始java中的异常处理18例如,定义一个继承于Exception类的用户自定义异常类,语句如下:classMyExceptionextendsException{MyException(){super(“数据错误!”);}MyException(Stringexp){super(exp);}}下一页上一页返回开始java中的异常处理196.3异常的处理机制每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。这就是Java的异常处理机制。下一页上一页返回开始java中的异常处理20Java中处理异常有两种方式:捕获异常、声明抛弃异常。捕获异常,就地解决,并使程序继续执行。声明抛出异常也就是将异常向外转移,即将异常抛出方法之外,由调用该方法的环境去处理。下一页上一页返回开始java中的异常处理216.3.1捕获异常当Java运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。这是积极的异常处理机制。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。下一页上一页返回开始java中的异常处理22捕获异常是通过try-catch-finally语句实现的。处理异常的程序结构如下:try{//接受监视的程序块,在此区域内发生的异常,由catch中指定的程序处理}catch(要处理的异常种类和标识符){//处理异常}catch(要处理的异常种类和标识符){//处理异常}…}finally{//最终处理}下一页上一页返回开始java中的异常处理23try-catch-finally语句1.try捕获异常的第一步是用try{…}选定捕获异常的范围,所有可能抛出异常的语句都放入try模块中。try模块中的语句是程序正常流程要执行的语句,但是在执行过程中有可能出现异常。2.catch(必有)每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。catch语句只需要一个形式参数指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。下一页上一页返回开始java中的异常处理24try-catch-finally语句在catch块中是对异常对象进行处理的代码,与访问其它对象一样,可以访问一个异常对象的变量或调用它的方法。getMessage()是类Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable还提供了方法printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。例如:下一页上一页返回开始java中的异常处理25try-catch-finally语句try{......}catch(FileNotFoundExceptione){System.out.println(message:+e.getMessage());e.printStackTrace(System.out);}catch(IOExceptione){System.out.println(e.getMessage());}下一页上一页返回开始java中的异常处理26try-catch-finally语句catch语句的顺序:捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特
本文标题:JAVA应用基础 第五章 异常处理
链接地址:https://www.777doc.com/doc-3874865 .html