您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第8讲_异常处理_793306857
Java语言程序设计Java的异常处理异常及异常处理机制自定义异常Java的异常处理JAVA语言程序设计清华大学刘宝林3对错误的处理程序执行的错误处理错误–向用户通知错误–保存全部工作–让用户适当地退出程序异常处理–Java检测和报告错误的机制JAVA语言程序设计清华大学刘宝林4处理错误的方式函数式编程中,直接检测调用函数返回值以确定错误内容,存在的问题–检测错误返回的编码工作量大,逻辑上复杂–返回的错误信息有限,无详细的位置、性质等异常处理–throws,使不能正常结束的方法抛出一个封装了错误信息的对象-异常–使用异常处理程序处理异常错误JAVA语言程序设计清华大学刘宝林5异常处理机制Java中定义了很多异常类,每个异常类都代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。这就是Java的异常处理机制JAVA语言程序设计清华大学刘宝林6异常处理机制当方法执行过程中出现错误而干扰了程序流程时,会抛出一个异常,即构造出一个异常类的对象。异常类对象代表当前出现的一个具体异常,该对象封装了异常的有关信息。异常分为系统定义异常和用户自定义异常。异常抛出方式:–自动抛出(系统定义异常)–用throw语句抛出(用户定义异常)方法中的异常处理:–捕获异常,就地解决,并使程序继续执行。–将异常向外转移,即将异常抛出方法之外,由调用该方法的环境去处理。JAVA语言程序设计清华大学刘宝林7异常类Throwable类Exception类Error类自定义异常类ArrayIndexOutOfBoundsException类NullPointerException类JAVA语言程序设计清华大学刘宝林8异常类Exception类定义的是较轻的错误,你可以编写代码来处理这类错误,并继续程序的执行。Exception原因:–打开的文件不存在。–网络连接中断。–操作数超过允许范围。–想要加载的类文件不存在。–试图通过空的引用型变量访问对象。–数组下标越界。Error类定义的错误是致命性错误,一般会导致程序停止执行。JAVA语言程序设计清华大学刘宝林9Exception类构造方法–Exception()–Exception(String异常描述)Exception类的方法均继承自Throwable类方法–StringgetMessage()返回异常描述。–StringtoString()返回异常对象详细信息。–voidprintStackTrace()打印异常发生的路径,即引起异常的方法调用嵌套序列。JAVA语言程序设计清华大学刘宝林10系统定义的异常类ClassNotFoundException未找到要加载的类ArrayIndexOutOfBoundsException数组越界使用FileNotFoundException未找到指定的文件或目录IOException输入、输出错误NullPointerException引用空的尚无内存空间的对象•系统将常见错误予定义为若干异常类•当出现异常时自动抛出JAVA语言程序设计清华大学刘宝林11系统定义的异常类ArithmeticException算术错误,如除数为0InterruptedException一线程在睡眠、等待或其他原因暂停时被其他线程打断UnknownHostException无法确定主机的IP地址SecurityException安全性错误,如Applet欲读写文件MalformedURLExceptionURL格式错误JAVA语言程序设计清华大学刘宝林12用户定义的异常类用户自定义异常主要用来处理用户程序中特定的逻辑运行错误。定义异常类classMyExpextendsException{//或继承其他异常类//定义新的属性//重载构造方法例:MyExp(Stringmsg){super(msg)}//重载原方法,或定义新方法}抛出异常类:throw异常类对象;例:thrownewMyExp(“年龄超过规定”);例:thrownewException();JAVA语言程序设计清华大学刘宝林13异常的产生自动抛出异常–运行异常程序运行中可自动由Java解释器引发并处理的异常;编程时不需捕获或声明。如:除以0、下标越界、指针例外等–非运行异常可在编译期由编译器确定某方法是否会发生此类异常;必须编程时捕获或声明如:IOException,InterruptedExceptionJAVA语言程序设计清华大学刘宝林14异常的产生编程抛出异常:–在程序的相应部分抛出异常:–thrownewXXXException();–thrownewXXXException(Stringdescribe);例:StringreadData()throwsEOFException{………………..thrownewEOFException(“error”);………………….}JAVA语言程序设计清华大学刘宝林15警戒区:可能会引起异常的代码段try{警戒区代码//抛出例外}catch(ExceptTypee){//捕获例外例外处理代码//异常处理}后续语句若try块中出现异常,则控制转向下面的异常处理部分,然后执行后续语句。若try块中没有异常,则try块执行完,控制转向后续语句。异常处理JAVA语言程序设计清华大学刘宝林16多个异常的处理可用一组并列的catch块处理多异常情况try{...}catch(异常类1e1){...}catch(异常类2e2){...}...匹配规则:–抛出对象与catch参数类型相同–抛出对象为catch参数类的子类–按先后顺序捕获(注意catch块书写时的排列顺序:先具体、后一般),但只捕获一次。JAVA语言程序设计清华大学刘宝林17异常处理过程当遇到关键字throw时就抛出一个异常将控制转移到相关的catch块中处理之如果产生异常的方法本身没有相应catch语句块,则应有throws语句声明例外退出当前方法并转向上一级调用此方法的方法的catch语句块若始终没有catch块来处理则由运行系统处理JAVA语言程序设计清华大学刘宝林18示例例:ExceptionMethods.java–抛出-捕获-处理–异常的各方法JAVA语言程序设计清华大学刘宝林19publicclassExceptionMethods{publicstaticvoidmain(String[]args){try{//抛出例外thrownewException(Here'smyException);}catch(Exceptione){//捕获例外//处理例外System.out.println(CaughtException);System.out.println(e.getMessage():+e.getMessage());System.out.println(e.toString():+e.toString());System.out.println(e.printStackTrace():);e.printStackTrace();}}//endofmain()}//endofclassJAVA语言程序设计清华大学刘宝林20自定义异常类声明一个新的异常类,该异常类必须从Java已有定义的异常类继承,如Exception、IOException等为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现该类所对应的错误的信息。例:Inheriting.javaJAVA语言程序设计清华大学刘宝林21classMyExceptionextendsException{//自定义例外publicMyException(){}publicMyException(Stringmsg){super(msg);}}publicclassInheriting{publicstaticvoidf()throwsMyException{System.out.println(ThrowingMyExceptionfromf());thrownewMyException();//抛出自定义例外}………publicstaticvoidmain(String[]args){try{f();}//处理自定义例外catch(MyExceptione){e.printStackTrace();}………}//endofmain()}JAVA语言程序设计清华大学刘宝林22异常转移异常总是发生在方法执行过程中。当异常不处理时会向方法外转移。系统定义的异常自动向外转移。用户自定义的异常要转移需要在方法头声明一下StringreadData()throwsMyExp{………………..thrownewMyExp(“年龄超过规定”);}1JAVA语言程序设计清华大学刘宝林23finallytry{……...}catch(Aa){…….}finally{………}finally:不论是否有异常抛出,均执行只有当try块中执行System.exit()时,会立即结束程序。用处:一般用来进行一些”善后“操作,如系统资源的释放、文件的关闭等例:FinallyWorks.javaJAVA语言程序设计清华大学刘宝林24publicclassFinallyWorks{staticintcount=0;publicstaticvoidmain(String[]args){while(true){try{//countiszerofirsttime:if(count++==0)thrownewException();System.out.println(Noexception);}catch(Exceptione){System.out.println(Exceptionthrown);}finally{//是否抛出例外都会执行System.out.println(infinallyclause);if(count==2)break;//outofwhile}}//endofwhile}//endofmain()}//endofclassJAVA语言程序设计清华大学刘宝林25小结本章内容–异常及异常处理机制–自定义异常–Java的异常处理复习要求–了解Java异常处理机制–掌握Java的异常处理(异常的抛出、捕获与处理)–掌握自定义异常–学会使用finally
本文标题:第8讲_异常处理_793306857
链接地址:https://www.777doc.com/doc-3971255 .html