第十一讲JAVA异常异常概念介绍声明和抛出异常捕获异常自定义异常捕获所有异常和重掷异常异常概念介绍传统程序错误处理方式被调用函数返回特殊值由调用者接收,以此判断错误是否发生。例:intcalledFunction(intage){//判断人的年龄是否合理if(age=0)return-1;//表示年龄不合理,太小elseif(age200)return-2;//表示年龄不合理,太大return0;}intcallingFunction(){inti=calledFunction(500);if(i==-1){…}else(i==-2){…}}异常概念介绍JAVA异常处理intcalledFunction(intage)throwsexecption1{if(age=0)newexception1(“年龄太小”);elseif(age200)newexception1(“年龄太大”);return0;}intcallingFunction(){inti;try{i=calledFunction(500);}catch(exception1e){}}异常处理机制将程序错误处理规范化,使处理错误的程序代码变得井然有序,不必在每个函数调用后逐一检查返回值。异常概念介绍什么是异常(Exception)?异常就是在程序执行过程中所发生的中断了正常指令流的事件。异常表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。Java异常类结构:Throwable类Error类Exception类RuntimeExceptionIOExceptionAWTException……异常概念介绍Exception和Error区别错误代表编译期错误或系统错误,是不可控的,无须在程序内部捕获并处理;异常表示需要捕捉或者需要程序进行处理的异常。例:司机驾驶汽车在公路上行驶,车没油了或被路上的钉子扎破车胎了导致车行驶过程的中断为异常,如果车的发动机坏了导致车不能行驶是错误。异常概念介绍RuntimeException异常分为可控制的异常和不可控制的异常,RuntimeException属于不可控制的异常,不需捕获,它是由系统自动抛出。这类异常大都代表通用的异常,是每个对象的每个方法中都可能发生的异常,比如NullPointerException是每个对象都可能发生的,如果针对每个引用都去判断是否为NULL然后抛出异常,代码量将急剧增加。声明和抛出异常声明异常voidtest()throws异常1,异常2{}抛出异常if(条件1)thrownew异常1();if(条件2)thrownew异常2();例:Publicvoidtest()throwsIOException{if(打开文件错误)thrownewIOException(“文件打不开”);}捕获异常语句格式:try{有异常抛出的函数调用;}catch(捕获的异常类1变量){异常处理}catch(捕获的异常类2变量){异常处理}finally{无论有无异常抛出,都执行这里的语句。主要用于资源释放。}捕获异常例:PublicvoidcatchException(){try{test();}catch(异常1e){异常1处理;}catch(异常2e){异常2处理;}}自定义异常例:classmyexceptionextendsException{Stringmsg;publicmyexception(Strings){msg=s;}publicStringgetMessage(){returnmsg;}}覆写父类方法自定义异常publicclassexception{publicvoidtest(Strings)throwsmyexception{if(s.equalsIgnoreCase(test))thrownewmyexception(测试);}publicstaticvoidmain(String[]args){exceptionex=newexception();try{ex.test(test);}catch(myexceptione){System.out.println(e.toString());}finally{}}}声明函数异常抛出函数异常捕获函数异常捕获所有异常和重掷异常捕获所有异常异常都是Exception类的子类,当异常发生时,将从第一个catch语句开始比对,直到遇到与抛出异常类型一致或是所抛出异常类的父类,便交由此catch语句处理。如若第一个catch语句捕获Exception,则无论发生什么异常,均有此catch语句处理,其后面的捕获语句将不被执行,所以如有多个catch语句,则将捕获Exception的语句放在最后,以免截获所发生的异常。try{ex.test(test);}catch(myexceptione){System.out.println(e.toString());}catch(Exceptione){System.out.println(e.toString());}finally{}放在最后捕获所有异常和重掷异常重掷异常当捕获到异常后,可直接处理,也可重新抛出交由更高一层的函数处理。publicvoidrethrowingthrowsmyexceptiontry{ex.test(test);}catch(myexceptione){System.out.println(e.toString());throwe;}finally{}当前函数需声明重掷异常类型重掷异常重掷后的异常将由函数rethrowing的调用者处理本次课程小结重点JAVA异常处理机制及自定义异常上机作业上机练习基于第九次作业,定义一个异常类,将所有数据库操作捕获到的异常转换为自定义的异常并重新抛出。具体转换方法为:用数据库的异常信息再加上自己的补充信息生成自定义异常后抛出,由该方法的调用者处理新抛出的异常。例:假设自定义异常类为MyException,假设捕获到了数据异常变量dberr则thrownewMyException(“数据库操作错误:”+dberr.getMessage());