1 / 28

第七章 异常处理

第七章 异常处理. §1.1 错误处理的方法概述 §1.2 Java 的异常处理机制 §1.3 创建自己的异常类. §1.1 错误处理的方法概述. 传统的程序运行时错误处理 异常处理. 1 传统的程序运行时错误处理. 如 C 语言: 函数返回值 = 某个可能会执行失败的函数(); if( 函数返回值 == 表示该函数执行成功的值) { 正常代码 } else if( 函数返回值 == 代表错误情况 1 的值 ){ 处理错误情形 1} else if( 函数返回值 == 代表错误情况 2 的值 ){ 处理错误情形 2} …….

reidar
Download Presentation

第七章 异常处理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第七章 异常处理 §1.1 错误处理的方法概述 §1.2 Java的异常处理机制 §1.3 创建自己的异常类

  2. §1.1 错误处理的方法概述 • 传统的程序运行时错误处理 • 异常处理

  3. 1 传统的程序运行时错误处理 如C语言: • 函数返回值=某个可能会执行失败的函数(); if(函数返回值==表示该函数执行成功的值){正常代码} else if(函数返回值==代表错误情况1的值){处理错误情形1} else if(函数返回值==代表错误情况2的值){处理错误情形2} ……

  4. 1 传统的程序运行时错误处理 • 函数返回值=某个可能会执行失败的函数(); if(函数返回值!=表示该函数执行成功的值) { Switch(函数返回值){ case 错误情况1的值:处理错误情形1 case 错误情况2的值:处理错误情形2 ……}} else{正常代码}

  5. 1 传统的程序运行时错误处理 缺点: 1)整个程序代码穿插错误处理代码,使得条理性和可读性差; 2)对错误处理程序难以集中管理,难以保证程序的一致性; 3)对于返回值的意义,要借助于文档,程序维护困难。

  6. 2 异常处理 如C++,JAVA语言: • 就是在异常发生时,由编程语言提供的某种机制通知应用程序,让应用程序决定如何进行下一步的处理。 传统方式: 1)负责测出错误的发生 (程序设计者) 2)进行错误的处理 异常处理方式:2)进行错误的处理 (程序设计者)

  7. 2 异常处理 • 特点: 1)可将错误处理代码和常规代码隔离开来,提高程序的可读性和可维护性; 2)可以处理一组错误,进行集中管理,保证程序的一致性。 3) 将异常事件分类,体现了良好的层次性。

  8. §1.2 Java的异常处理机制 Java语言用异常为它的程序提供了错误处理方式,为方法的异常终止和出错处理提供了清晰的接口。 • 异常和异常对象 • 异常的处理过程

  9. 1 异常和异常对象 • 异常:在程序执行的时候,所发生会打断程序正常流程的事件。 异常的类型 错误出现 产生异常对象 程序的状态信息 “异常”被看作是对象,是继承自类Throwable的子类。所有Throwable的子类所产生的对象实例,都是异常。

  10. 1 异常和异常对象 • 异常类的层次 Object Throwable Exception Error Non_RuntimeException RuntimeException

  11. 1 异常和异常对象 • 运行时异常:运行异常可以不做处理,运行时系统会把生成的运行时异常对象交给默认的异常处理程序,在标准输出上显示异常的内容及发生异常的位置。

  12. 1 异常和异常对象 • ArithmeticException:除0,用0取模; • NullPointException:访问一个空对象中的变量和方法,或一个空数组中的元素; • ClassCastException:把对象o强制成Class C,而o既不是C的实例,又不是C的子类的实例; • NegativeArraySizeException:数组的长度是负数; • ArrayIndexOutOfBoundsException:访问数组中的非法元素。

  13. 1 异常和异常对象 • 非运行时异常:非运行异常需要使用try-catch-finally语句捕获异常或使用throws子句生声明异常。

  14. 1 异常和异常对象 • IOException • FileNotFoundException:找不到文件; • InterruptedIOException; • UnknownHostException; • UnknownServiceException; • SocketException; • MalformedURLException; • NoSuchMethodException • ClassNotFoundException

  15. 2 异常的处理过程 • 抛出异常:产生一个异常对象以及把它转交给运行系统 • 间接抛出(try) • 直接抛出(throw) • 捕获异常(catch):找出异常的合适处理方法,即异常指针的选择过程 • 处理异常

  16. 2 异常的处理过程 Java的异常处理机制由try / catch / finally 组成 try{ //可能会产生异常的程序块 }catch(Exception1){ //异常处理 } catch(Exception2){ //异常处理 }[finally{ //清除方法状态和关闭文件等语句 }]

  17. 2 异常的处理过程 例1: try{ System.in.read(); }catch(IOException e){ String err = e.getMessage(); System.out.println(err); }

  18. 2 异常的处理过程--声明异常 例2:声明异常 Protected void myMethod(){ try{ doRead(); }catch(IOException e){ System.out.println(e.getMessage());} } Protected void doRead() throws IOException{ System.in.read(); }

  19. 2 异常的处理过程—抛出异常 例3: Public static void main(String[] args){ try{ System.out.pringtln(passingGrade(90,80)); }catch(Exception e){ System.out.println(e.getMessage());} } Static void passingGrade(int correct,int total) throws Exception{ if(correct>total) throw new Exception(“Invalid values”); }

  20. 2 异常的处理过程 • Throw语句会使得一个异常被抛掷,其结果将导致程序控制的转换,即转向处理异常的catch块。形式: throw new Exception(“描述字符串”); • Throws是将本方法产生的异常不处理,而是抛给上层调用者。

  21. §1.3 创建自己的异常类 • 创建自己的异常类 继承Exception及其子类,多数情况下为非运行时异常。如 class MyException extends Exception{ … String say(){…} } • 在程序中使用自己的异常类 class UseMyException{ … try{ throw new MyException(); }catch(MyException e){System.out.println(e.say()); } }

  22. 小结 • JAVA异常处理机制及处理过程 • 异常处理与程序的结合使用 • 异常,运行时异常,非运行时异常, Error,try-catch-finally,throw,throws

  23. 习题 • 解释JAVA异常处理机制及处理过程 • 解释异常,运行时异常,非运行时异常

  24. UsingExceptions.java public class UsingExceptions { public static void main( String args[] ) { try { method1(); } catch ( Exception e ) { System.err.println( e.getMessage() + "\n" ); } } public static void method1() throws Exception { method2(); } public static void method2() throws Exception { method3(); } public static void method3() throws Exception { throw new Exception( "Exception thrown in method3" ); } }

  25. UsingExceptions.java public class UsingExceptions { public static void main( String args[] ){ try { throwException(); } catch ( Exception e ) { System.err.println( "Exception handled in main" ); } } public static void throwException() throws Exception {try { System.out.println( "Method throwException" ); throw new Exception(); } catch( RuntimeException e ) {System.err.println( "Exception handled in " + "method throwException" ); } finally { System.err.println( "Finally is always executed" ); } } }

  26. UsingExceptions class DivideByZeroException extends ArithmeticException { public DivideByZeroException() { super( "Attempted to divide by zero" ); } public DivideByZeroException( String message ) { super( message ); } }

  27. public class ExceptionExample { public static void main( String args[] ){ try { int number1 =1; int number2 =0; double result = quotient( number1, number2 ); } catch ( DivideByZeroException dbze ) { System.err.println("Attempted to Divide by Zero" +dbze.toString() ); } }

  28. public double quotient( int number1, int number2 ) throws DivideByZeroException { if (number2 == 0 ) throw new DivideByZeroException(); else return ( double ) number1 / number2; } }

More Related