您好,欢迎访问三七文档
20.异常的捕获与处理本季讲解了Java中的异常处理程序,讲解了异常的捕获与处理的基本过程,throw与throws关键字、自定义异常操作类等。blog:[零基础学JAVA]JavaSE面向对象部分-20.异常的捕获与处理2009-02-11异常的概念指程序中断执行的一种指令流publicclassDemo01{publicstaticvoidmain(Stringargs[]){inti=0;intj=10;System.out.println(程序代码执行之前~~~);System.out.println(i/j);System.out.println(程序代码执行之后~~~);}}现在我们反过来哈,j/ipublicclassDemo01{publicstaticvoidmain(Stringargs[]){inti=0;intj=10;System.out.println(程序代码执行之前~~~);System.out.println(j/i);System.out.println(程序代码执行之后~~~);}}异常一旦发生,则在异常发生处之后的所有代码都不再被执行了。异常的分类只要一发生了异常,则肯定会抛出一个异常类的实例化对象。面试问题:RuntimeException与Exception的区别:·RuntimeException表示异常可以由JVM进行处理·Exception:表示用户可以自行处理·实际上两个异常并没有太多的区别,用户都是可以处理的。·Error:不能由用户自行处理的异常。捕获异常(1)publicclassDemo02{publicstaticvoidmain(Stringargs[]){inti=0;intj=10;System.out.println(程序代码执行之前~~~);try{//下面跟上可能发生错误的代码段System.out.println(j/i);System.out.println(-------------------);}catch(ArithmeticExceptionae){//进行异常处理System.out.println(运算发生了异常~~~);}System.out.println(程序代码执行之后~~~);}}加入异常处理之后,程序可以正常的执行完,也可以正常的捕获错误了,但是在try语句中,在发生异常的地方就进行跳转了,所以异常发生语句之后的代码不会被执行。如果程序中有多个异常要处理呢?注意:一个新的操作:将字符串的内容变为数字。publicclassDemo03{publicstaticvoidmain(Stringargs[]){Stringstr=123;//将字符串变为数字inti=Integer.parseInt(str);System.out.println(i*2);}}在此代码之中,要求字符串的内容必须是由数字组成的。如果不全是数字,我们来看下效果publicclassDemo03{publicstaticvoidmain(Stringargs[]){Stringstr=123a;//将字符串变为数字inti=Integer.parseInt(str);System.out.println(i*2);}}要求:要求可以在JAVA运行程序的后面加入运行时参数,参数为两个数相除的内容。publicclassDemo04{publicstaticvoidmain(Stringargs[]){//从运行时处接收参数inti=Integer.parseInt(args[0]);intj=Integer.parseInt(args[1]);System.out.println(程序代码执行之前~~~);try{//下面跟上可能发生错误的代码段System.out.println(i/j);System.out.println(-------------------);}catch(ArithmeticExceptionae){//进行异常处理System.out.println(运算发生了异常~~~);}System.out.println(程序代码执行之后~~~);}}在以上的程序之中可能存在那些问题呢?·如果没有输入参数的时候,则会有错误:ArrayIndexOutOfBoundsException(数组下标越界)·如果输入的参数的内容不是数字,则会有错误:NumberFormatException(数字格式化异常)·如果输入的被除数为零,则会有错误:ArithmeticException(算术异常)则此程序代码只有一个catch肯定是不够的,需要处理多个异常。publicclassDemo05{publicstaticvoidmain(Stringargs[]){//从运行时处接收参数inti=0;intj=0;System.out.println(程序代码执行之前~~~);try{i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);//下面跟上可能发生错误的代码段System.out.println(i/j);System.out.println(-------------------);}catch(ArithmeticExceptionae){//进行异常处理System.out.println(ae);System.out.println(1.运算发生了异常~~~);}catch(NumberFormatExceptionne){System.out.println(ne);System.out.println(2.输入的内容不是数字~~~);}catch(ArrayIndexOutOfBoundsExceptionae){System.out.println(ae);System.out.println(3.输入的参数个数不正确~~~);}System.out.println(程序代码执行之后~~~);}}以上的程序只要是有异常发生了,则会自动找到对应的catch语句,分别进行处理,但是一个程序可能会存在各种问题,那么有可能全部的catch都写出来吗?ArithmeticException是Exception的子类哈~publicclassDemo06{publicstaticvoidmain(Stringargs[]){//从运行时处接收参数inti=0;intj=0;System.out.println(程序代码执行之前~~~);try{i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);//下面跟上可能发生错误的代码段System.out.println(i/j);System.out.println(-------------------);}catch(ArithmeticExceptionae){//进行异常处理System.out.println(ae);System.out.println(1.运算发生了异常~~~);}catch(NumberFormatExceptionne){System.out.println(ne);System.out.println(2.输入的内容不是数字~~~);}catch(ArrayIndexOutOfBoundsExceptionae){System.out.println(ae);System.out.println(3.输入的参数个数不正确~~~);}catch(Exceptione){System.out.println(异常处理);}System.out.println(程序代码执行之后~~~);}}以上代码需要注意:在异常处理中,对于catch语句要求处理更粗的异常要放在处理更细的异常之后。我们验证下效果哈~publicclassDemo07{publicstaticvoidmain(Stringargs[]){//从运行时处接收参数inti=0;intj=0;System.out.println(程序代码执行之前~~~);try{i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);//下面跟上可能发生错误的代码段System.out.println(i/j);System.out.println(-------------------);}catch(Exceptione){System.out.println(异常处理);}catch(ArithmeticExceptionae){//进行异常处理System.out.println(ae);System.out.println(1.运算发生了异常~~~);}catch(NumberFormatExceptionne){System.out.println(ne);System.out.println(2.输入的内容不是数字~~~);}catch(ArrayIndexOutOfBoundsExceptionae){System.out.println(ae);System.out.println(3.输入的参数个数不正确~~~);}System.out.println(程序代码执行之后~~~);}}publicclassDemo08{publicstaticvoidmain(Stringargs[]){//从运行时处接收参数inti=0;intj=0;System.out.println(程序代码执行之前~~~);try{i=Integer.parseInt(args[0]);j=Integer.parseInt(args[1]);//下面跟上可能发生错误的代码段System.out.println(i/j);System.out.println(-------------------);}//只要是程序运行时产生的异常肯定可以使用Exception进行接收catch(Exceptione){System.out.println(异常处理);}System.out.println(程序代码执行之后~~~);}}捕获异常(2)不管是否发生了异常,都要执行finally代码。classMath{publicintdiv(inti,intj){returni/j;}}publicclassDemo10{publicstaticvoidmain(Stringargs[]){System.out.println(newMath().div(1,1));}}这个代码现在没问题哈~classMath{//表示此方法必须被处理异常,必须在调用处处理publicintdiv(inti,intj)throwsException{returni/j;}}publicclassDemo10{publicstaticvoidmain(Stringargs[]){System.out.println(newMath().div(1,1));}}我们必须要对此代码进行catch捕获classMath{//表示此方法必须被处理异常,必须在调用处处理publicintdiv(inti,intj)throwsException{returni/j;}}publicclassDemo10{publicstaticvoidmain(Stringargs[]){try{System.out.println(newMath().div(1,1));}catch(Exceptione){System.out.println(e);}}}正常执行输出哈classMath{//表示此方法必须被处理异常,必须在调用处处理publicintdiv(inti,intj)throwsException{returni/j;}}publicclassDemo10{publicstat
本文标题:异常的捕获与处理
链接地址:https://www.777doc.com/doc-2428999 .html