资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
异常处理一、 场景介绍皇母娘娘最近打算举办千年一次的蟠桃大会,用来犒赏各路神仙。针对各路神仙光临蟠桃会需要采取以下流程: 注册 品尝 离开当然初衷是好的,但仍然有意外情况出现,例如孙猴子的大驾,已经让皇母娘娘亏损很大。为此皇母娘娘如何去处理了。针对这些异常现象,如果皇母娘娘可能出现的突发性异常现象提前做了充分的准备,那么就会防微杜渐,降低突发性异常发生时造成的损失。Java语言中用try.catch.语句来处理异常public void welcome()try/* * 正常流程 */1.注册2.品尝3.离开catch(未注册 e)各路神仙出动,赶走不遵守规矩之人!catch(迷路异常 e)志愿者帮助到达目的地二、 运用异常处理机制通过提供异常处理机制,主要是为了提高程序的健壮性。所谓程序的健壮性,是指程序在大多数情况下都能正常运行,返回预期的结果;如果偶尔出现异常情况,能采取一个周全优化的解决的措施。public static void main(String args) String flag= equals(null);if(flag = null)System.out.println(是否异常+flag);elseSystem.out.println(正常 +flag);private static String equals(String str)boolean flag;String str1=;tryflag=str.equals();str1=a;catch(NullPointerException e)System.out.println(空指针异常);str1=null;System.out.println(-);return str1;Java的异常处理机制采用try、catch、finally、throw、throws五个关键字。throws主要用于方法定义中,用于声明该方法使用时可能抛出的异常。throw用于抛出一个实际的异常,一般单独作为语句使用。finally用于从try代码块退出时必须被执行的代码放置于finally中,在后面学习过程中文件输入输出流的关闭、数据库连接的关闭。当进行异常处理时,不会影响下面代码的执行。当方法栈中栈顶元素没有异常处理,那么将往回抛,去找调用该方法的方法,看其是否有异常处理,如果没有继续往回抛,直到找到有该类型的异常处理。如果一直没有找到,那么将在控制台打印异常。Main方法调用trytestArray1();catch(ArrayIndexOutOfBoundsException e)System.out.println(数组越界3);private static void testArray()tryint arr =new int2;System.out.println(arr2);catch(ArrayIndexOutOfBoundsException e)System.out.println(数组越界1); private static void testArray1()/trytestArray();/catch(ArrayIndexOutOfBoundsException e)/System.out.println(数组越界2);/作业:定义一个数组,访问超过数组中的索引的元素,利用异常处理,进行代码编写。【ArrayIndexOutOfBoundsException】三、 捕获异常针对try代码块中有多个异常信息,那么是否能采用多个catch?private static void testManyException() tryString str =;str.equals();int arr =new int2;System.out.println(arr2); catch(NullPointerException e)/异常定义的变量不能与局部变量同名System.out.println(空指针异常);catch(ArrayIndexOutOfBoundsException e)System.out.println(数组越界异常);作业:int number1 = 4,8,16,32,64; int number2 = 2,0,4,4; 拿number1中元素除以number2中元素,使用多个try.catch进行捕获。private static void testDivException()int number1 = 4,8,16,32,64; int number2 = 2,0,4,4; /*tryfor (int i = 0; i number1.length; i+) int a=number1i/number2i;System.out.println(a);catch(Exception e)*/for (int i = 0; i number1.length; i+) tryint a=number1i/number2i;System.out.println(a);catch(ArithmeticException e)System.out.println(除数为0);catch(ArrayIndexOutOfBoundsException e)System.out.println(数组溢出);四、 异常APIThrowable类有两个子类:Error类:程序本身无法恢复的严重错误。遇到这样的错误,建议让程序终止。Exception类:表示程序本身可以处理的异常。IOException:输入输出流异常FileNotFoundException:文件找不到异常RunTimeException:运行时异常ArithmeticException:数字运行异常,例如除数为0NullPointerException:空指针异常,当引用变量为null时,试图访问属性或方法时会抛出该异常,最常见。【Debug】IndexOutOfBoundException:数组越界异常ClassCastException:类型转换异常。I a = new A();B b = (B)a;System.out.println(b);IllegalArgumentException:非法参数异常。用于检查参数的方法是否合法。Exception种类:受检查异常和运行时异常。运行时异常:没有try.catch,也没有throws,能编译通过,只有在运行异常时才能检测。针对运行时异常,不应该只是避免,而是应该去解决代码中的问题。受检查异常:Java编译器会检查,要求要么用try.catch,要么用throws抛出异常。其方法抛出的异常为受检查的异常,也就是直接继承父类【只要不是继承RunTimeException的类】,那么调用方法的代码需要使用try.catch或者throws进行捕获。但是如果是throws运行期异常类,那么调用方法时不需要try.catch或者throw,会在运行过程中发现异常信息。当然采用try.catch进行捕获也可以。因此运行期异常一般来说,程序员应该避免出现这样的异常,而不是通过try.catch进行捕获。五、 Try代码嵌套块int number1 = 4, 8, 16, 32, 64,54 ;int number2 = 2, 0, 4, 4 ;try for (int i = 0; i b)throw new NullPointerException(空指针异常);else if(a=b)throw new ArrayIndexOutOfBoundsException(数组越界异常);elsethrow new ClassCastException(类型转换异常); trytest1(2,2);catch(NullPointerException e)System.out.println(1);catch(ArrayIndexOutOfBoundsException e)System.out.println(2);catch(ClassCastException e)System.out.println(3);疑问:1.能不能将ClassCastException 改为Exception?2.如果改了可行的话,那么假如出现空指针异常,会执行哪个catch?3.能不能将Exce
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号