您好,欢迎访问三七文档
第十二讲风险行为解决方案——异常处理回顾什么是接口?使用Java接口需要注意哪几点?什么是面向接口编程?优点是什么?什么是常量?使用Java常量需要注意哪几点?提问本章案例加法器的异常处理除法器的异常处理案例演示本章目标掌握Java异常处理机制掌握try、catch、finally组合处理异常掌握多重catch块处理异常掌握throw抛出异常掌握throws声明异常掌握Java中的包装类预习检查什么是异常?Java中如何进行异常处理?请说明throw与throws的区别与联系?什么是包装类?提问现实世界中的异常什么是异常?异常就是不正常,比如说出门忘了带钥匙,上班途中自行车爆胎,到了公司忘了打卡,上厕所手机掉到马桶里。这些不正常的事情虽然只是偶尔发生,但是一旦降落到你的头上就是件非常麻烦的事。那么Java程序中会不会发生异常呢?下面我们就来看一看:程序中的异常我们来完成一个简单的加法器:从控制台输入两个数字,程序计算出这两个数字的和,看看会不会出现异常:publicclassAddition{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请录入两个数:);doublenum1=input.nextDouble();doublenum2=input.nextDouble();doubleresult=num1+num2;System.out.println(两个数的和是:+result);System.out.println(欢迎使用!);}}正常情况:录入:100和200输出:两个数的和是:300欢迎使用!不正常情况:录入:100和a程序会中断运行教员演示Addition.java异常的概念异常是程序在执行时发生的不正常事件,它会打断程序的正常运行。产生异常!程序正常运行程序中断运行现实世界中的异常我们都会想办法解决掉,我们会根据不同的异常情况进行相应的处理,而不会视而不见。处理完成后,生活还会继续。捞出来修理后手机掉到厕所里!补胎后上班自行车爆胎!异常处理的概念Java异常处理机制就是在程序代码执行过程中出现异常后,会按照我们预先制定的处理方法对异常进行处理,异常处理完成后,程序会继续运行下去。程序中预先制定的处理方法对异常进行处理产生异常!程序正常运行处理完毕,程序继续运行对异常进行处理Java中如何进行异常处理Java异常处理的五虎上将:try、catch、finally、throw、throws5个关键字。在方法中手动抛出异常声明方法有可能抛出的各种异常tryfinallycatchthrowsthrow有可能会出现异常的代码一定要放到try代码块中不管有没有异常都要执行的代码捕获和处理异常try-catch块在try-catch块中,try语句块中代码执行时会发生以下3种情况之一:trycatch执行try-catch后程序代码第一种情况:try语句块中代码正常执行完毕,没有任何异常,那么catch语句块的代码将不会被执行。try-catch块第一种情况代码示例:publicclassAddition1{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请录入两个数:);try{doublenum1=input.nextDouble();doublenum2=input.nextDouble();doubleresult=num1+num2;System.out.println(两个数的和是:+result);}catch(Exceptionex){System.out.println(对不起,不伺候!请录入数字!);ex.printStackTrace();}System.out.println(欢迎使用!);}}正常情况:录入:100和200输出:两个数的和是:300欢迎使用!教员演示Addition1.javatry-catch块在try-catch块中,try语句块中代码执行时会发生以下3种情况之一:trycatch执行catch后程序继续正常运行第二种情况:try语句块中代码执行过程中产生异常,并且该异常跟catch中声明的异常类型相符合,那么try语句块中剩余的代码将被忽略,catch语句块的代码将被执行。异常引发异常类型相符合进入catchtry-catch块第二种情况代码示例:publicclassAddition1{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请录入两个数:);try{doublenum1=input.nextDouble();doublenum2=input.nextDouble();doubleresult=num1+num2;System.out.println(两个数的和是:+result);}catch(Exceptionex){System.out.println(对不起,不伺候!请录入数字!);ex.printStackTrace();}System.out.println(欢迎使用!);}}不正常情况:录入:100和a输出:对不起,不伺候!请录入数字!欢迎使用!异常堆栈段信息教员演示Addition1.javatry-catch块在try-catch块中,try语句块中代码执行时会发生以下3种情况之一:trycatch异常引发第三种情况:try语句块中代码执行过程中产生异常,但是抛出的异常并没有在catch语句块中声明,那么这个时候程序会立刻终止。异常类型不匹配try-catch后程序代码程序中断运行try-catch块第三种情况代码示例:publicclassAddition2{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请录入两个数:);try{doublenum1=input.nextDouble();doublenum2=input.nextDouble();doubleresult=num1+num2;System.out.println(两个数的和是:+result);}catch(ArithmeticExceptionex){System.out.println(对不起,不伺候!请录入数字!);ex.printStackTrace();}System.out.println(欢迎使用!);}}不正常情况:录入:100和a输出:异常堆栈段信息声明的异常对象类型是ArithmeticException(算术异常)教员演示Addition2.javatry-catch-finally块在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行:try块finally块catch块无异常异常try-catch-finally块try-catch-finally块代码示例:publicclassAddition3{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请录入两个数:);try{doublenum1=input.nextDouble();doublenum2=input.nextDouble();doubleresult=num1+num2;System.out.println(两个数的和是:+result);}catch(Exceptionex){System.out.println(对不起,不伺候!请录入数字!);ex.printStackTrace();}finally{System.out.println(欢迎使用!);}}}finally代码块正常情况:录入:100和200输出:两个数的和是:300欢迎使用!不正常情况:录入:100和a输出:对不起,不伺候!请录入数字!欢迎使用!异常堆栈段信息教员演示Addition3.java课堂练习编写类TestException,在main方法中使用try、catch、finally:在try块中,编写被0除的代码在catch块中,捕获被0除所产生的异常,并且打印异常信息在finally块中,打印“欢迎使用”演示:规范代码多重catch块一段代码可能会产生多个异常系统运行时会依次对每个catch块声明的异常对象进行检查,找到并执行第一个与try语句块抛出的异常类型匹配的catch块代码。其余的catch块将被忽略。trycatch执行catch后程序继续正常运行异常引发与异常类型1不符合catchcatch与异常类型2符合多重catch块多重catch块代码示例:publicclassDivision{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println(请录入两个数);try{intnum1=input.nextInt();intnum2=input.nextInt();doubleresult=num1/num2;System.out.println(两个数的商是:+result);}catch(InputMismatchExceptionex){System.out.println(对不起,不伺候!请录入数字!);ex.printStackTrace();}catch(ArithmeticExceptionex){System.out.println(对不起,不伺候!除数不能为零!);ex.printStackTrace();}catch(Exceptionex){System.out.println(剩下的错误我都包了!);ex.printStackTrace();}finally{System.out.println(欢迎使用!);}}}最后一个catch的是Exception类的对象输出:对不起,不伺候!请录入数字!欢迎使用!异常堆栈段信息进入第一个catch块录入:100和a输出:对不起,不伺候!除数不能为0!欢迎使用!异常堆栈段信息进入第二个catch块录入:100和0教员演示Division.java多重catch块使用多重catch语句时,异常子类一定要位于异常父类之前try{………}catch(Exceptionex){………}catch(InputMismatchExceptionex){………}×抛出异常我们可以把当前无法解决的异常抛出,把异常交给调用者处理publicclassStudent{privateintage;//学员年龄,不能小于0publicintgetAge(){returnage;}publicvoidsetAge(intage){//判断学员年龄是否小于0if(age0){this.age=age;}else{thrownewIllegalArgumentException(年龄必须大于零!);}}}throw关键字来手动抛出异常publicclassTestStudent{publicstaticvoidmain(String[]args){Studentstu=newStudent();try{stu.setAge(-100);}catch(IllegalArgumentExceptionex){System.out.println(ex.get
本文标题:第十二讲 异常处理
链接地址:https://www.777doc.com/doc-3822176 .html