2010IBMSoftwareInstitute异常处理Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute课程回顾多态是指一个对外接口,多种实现方式,即一个接口使用不同实例执行不同的操作,它分为两种——方法重载和方法重写方法重载是指在一个类的内部提供同名方法,但方法的参数列表不同;方法返回类型不是区分方法重载的标志方法重写发生在子父类继承关系中,子类提供与父类同名方法,其方法参数列表及返回类型相同,子类重写父类中的方法范围不能比父类小抽象类与“模版”类似,抽象类用于继承,抽象类不一定有抽象方法;有抽象方法的类一定是抽象类接口是一种特殊的类,是一系列方法或特征的声明;接口可以定义常量和抽象方法;接口允许多继承Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute本章内容异常的概念异常类的分类程序中的异常处Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute本章目标理解异常的概念掌握Java中异常类的继承结构掌握在Java中如何对程序进行异常处理Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute1.异常概述publicclassDemo{publicintdiv(intfirstNum,intsecondNum){returnfirstNum/secondNum;}publicstaticvoidmain(Stringargs[]){Demodemo=newDemo();intfirstNum=Integer.parseInt(args[0]);intsecondNum=Integer.parseInt(args[1]);System.out.println(demo.div(firstNum,secondNum));}}除数可以为零?除数为零时产生异常,中止程序运行保证程序不因出现异常而中止运行,必须要对出现的异常进行处理1.1为什么需要异常处理Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute1.2什么是异常现实生活中的异常每日开车去上班,大约15分钟异常情况时常发生堵车!天气状况不好!正常情况异常情况Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute什么是异常在Java编程中,异常程序运行过程中发生的错误。若处理不当,它会终止程序的运行如何处理异常?等待、改道慢行堵车天气状况差Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute什么是异常程序中预先设置异常的处理办法程序中出现异常异常处理程序运行处理完毕,继续运行Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute2.异常的分类ThrowableErrorException编译时异常SQLExceptionIOExceptionSystemExceptionNumberFormatExceptionNullPointerExceptionArithmeticExceptionRuntimeExceptionStruts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute异常的分类Error类通常用以描述Java运行系统中的内部错误以及资源耗尽的错误等,一般是指JVM错误Error类异常比较严重,仅靠修改程序本身不能恢复执行,被称为致命性异常Exception类被称为非致命性异常,可以通过捕获处理后正常运行,可以分为两种:RuntimeException异常和RuntimeException之外的异常RuntimeException异常又被称为运行时异常,即程序在运行阶段出现的异常;RuntimeException之外的异常又被称为编译时异常,即程序在编译阶段出现的异常Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute2.2程序中常见的异常类型异常类说明NullPointerException访问Null对象的方法IllegalArgumentException接收非法参数ClassNotFoundException不能加载所需要的类ArithmeticException算术运算异常,如除数为零ArrayIndexOutOfBoundsException数组小于或大于数组的长度InputMisMatchException接收的数据类型与实际输入的类型不匹配NumberFormatException格式化数据异常IOException文件读写异常Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute程序中常见的异常类型publicclassDemo{publicstaticvoidmain(Stringargs[]){Studentstu=null;System.out.println(stu.getName());}}ClassStudent{privateStringname;privateintage;//属性对应的getter/setter}NullPointerExceptionStruts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute程序中常见的异常类型publicclassDemo{publicstaticvoidmain(Stringargs[]){StringstuName=tom;intresult=Integer.parsetInt(stuName);}}NumberFormatExceptionStruts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute程序中常见的异常类型publicclassDemo{publicstaticvoidmain(Stringargs[]){intresult=50/0;}}AtrithmeticExceptionStruts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute3.异常处理使用try-catch-finally使用throws和throw在Java程序进行异常处理主要有以下两种方式Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitute3.1try-catch-finally在Java的异常处理过程中,实际上也是按照面向对象的方式进行的。处理的步骤如下:publicclassDemo{publicstaticvoidmain(Stringargs[]){try{inta=50;intresult=a/0;}catch(ArithmeticExceptione){e.printStackTrace();}finally{System.out.println(没有找到匹配的异常);}}1.发生异常,实例化异常类对象2.执行异常处理代码3.异常统一出口Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitutetry-catch-finally不管有没有找到匹配的异常类型finally语句块的代码都会执行,在try-catch-finally语句中,try是必须的,catch,finally语句块是可以省略的,但catch、finally语句块不能同时省略publicclassDemo{publicstaticvoidmain(Stringargs[]){try{inta=50;intresult=a/0;}catch(ArithmeticExceptione){e.printStackTrace();}}省略finally语句块Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitutetry-catch-finallypublicclassDemo{publicstaticvoidmain(Stringargs[]){try{inta=50;intresult=a/0;}finally{System.out.println(异常的统一出口);}}省略catch语句块在try-catch-finally中,可以同时省略catch和finallym?Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitutetry-catch-finally程序中的一段代码可能会引发多种类型的异常,此时可以在一个try语句块后面跟多个catch语句块,分别处理不同的异常程序运行时,系统会从上至下分别对每个catch语句块处理的异常进行检测,并执行第一个与异常类型匹配的catch语句。执行其中的一条catch语句后,后面的catch语句都将被忽略try{intresult=firstNum/secondNum;System.out.println(两个数字相除的结果是:+result)}catch(ArithmeticExceptione){System.out.println(算术异常:);}catch(NumberFormatExceptione){System.out.println(数字转换异常);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println(数组下标越界异常);}catch(Exceptione){System.out.println(其他异常);}Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitutetry-catch-finally异常处理时捕获范围小的异常必须放在捕获大的异常之前,否则程序在编译时会出现错误try{firstNum=Integer.parseInt(args[0]);secondNum=Integer.parseInt(args[1]);}catch(ArithmeticExceptione){System.out.println(算术异常:);}catch(Exceptione){System.out.println(其他异常);}catch(NumberFormatExceptione){System.out.println(数字转换异常);}Struts+Hibernate+SpringIBMSoftwareInstituteJ2SE2010IBMSoftwareInstitutetry-catch-finallytry{intresult=firstNum/secondNum;System.out.println(两个数字相除的结果是: