Java语言程序设计基础教程课件(第9章)PPT课件下载推荐.ppt
《Java语言程序设计基础教程课件(第9章)PPT课件下载推荐.ppt》由会员分享,可在线阅读,更多相关《Java语言程序设计基础教程课件(第9章)PPT课件下载推荐.ppt(17页珍藏版)》请在冰豆网上搜索。
![Java语言程序设计基础教程课件(第9章)PPT课件下载推荐.ppt](https://file1.bdocx.com/fileroot1/2022-10/19/667af537-2c2f-4d4c-9573-9b4b767ac4cd/667af537-2c2f-4d4c-9573-9b4b767ac4cd1.gif)
PublicclassException1PublicclassException1publicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs)intresult=newTest().devide(3,0);
intresult=newTest().devide(3,0);
System.out.println(“result=”+result);
9.1java异常处理异常处理异常就是在程序的运行过程中所发生的异异常就是在程序的运行过程中所发生的异常事件,它中断程序的正常执行。
常事件,它中断程序的正常执行。
当程序运行出现异常时,当程序运行出现异常时,Java运行环境将运行环境将产生一个异常对象,产生一个异常对象,若有相应的异常处理若有相应的异常处理器处理相应异常,将转入相应异常处理代器处理相应异常,将转入相应异常处理代码,否则程序提前结束码,否则程序提前结束Java异常处理机制异常处理机制1trycatchfinallypublicclassException2publicclassException2publicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs)trytryintresult=newTest().devide(3,0);
catch(ArithmeticExceptione)catch(ArithmeticExceptione)System.out.println(e.getMessage();
System.out.println(e.getMessage();
finallyfinallySystem.out.println(“finally”);
System.out.println(“finally”);
System.out.println(“outoftry-catch”);
FinallyFinally和和finallyfinally代码块之后的语句的不同之处代码块之后的语句的不同之处:
当在当在trytrycatchcatch代码块中使用了代码块中使用了returnreturn语句退出当前方法语句退出当前方法或或breakbreak跳出某个循环前,跳出某个循环前,finallyfinally代码快都要执行,而代码快都要执行,而finallyfinally代码块之后的语句不会执行代码块之后的语句不会执行Java异常处理机制异常处理机制2方法使用方法使用throws抛出异常抛出异常classTestclassTestpublicintdevide(intx,inty)throwspublicintdevide(intx,inty)throwsArithmeticExceptionArithmeticExceptionintresult=x/y;
publicclassTestExceptionpublicclassTestExceptionpublicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs)intresult=newTest().devide(3,0);
编译异常!
编译器强制程编译器强制程序对可能发生序对可能发生异常的调用语异常的调用语句放入句放入try-catch中中classTestclassTestpublicintdevide(intx,inty)throwsExceptionpublicintdevide(intx,inty)throwsException。
publicclassException3publicclassException3publicstaticvoidmain(Stringargs)publicstaticvoidmain(Stringargs)trytryintresult=newTest().devide(3,0);
catch(Exceptione)catch(Exceptione)System.out.println(e.getMessage();
classTestclassTestpublicintdevide(intx,inty)throwsExceptionpublicintdevide(intx,inty)throwsException。
publicclassTestExceptionpublicclassTestExceptionpublicstaticvoidmain(Stringargs)throwspublicstaticvoidmain(Stringargs)throwsExceptionExceptionintresult=newTest().devide(3,0);
ThrowsThrows:
向上即:
向上即调用方法传递异调用方法传递异常,直到适当方常,直到适当方法捕获并处理法捕获并处理java系统异常类层次系统异常类层次在在在在jdkjdk中,所有的异常类都直接或间接地继承于中,所有的异常类都直接或间接地继承于中,所有的异常类都直接或间接地继承于中,所有的异常类都直接或间接地继承于ThrowableThrowable类类类类ThrowableErrorExceptionIllegalAccessErrorVirtualMachineErrorIOExceptionRuntimeExceptionArithmeticExceptionInterruptedExceptionIndexOutOfBoundsExceptionFileNotFoundExceptionEOFException可以自定义异可以自定义异常类吗?
如何常类吗?
如何定义?
定义?
类名功能描述ArithmeticException算术运算除数为零IndexOutofBoundException下标越界错误ArrayIndexOutofBoundsException数组元素下标越界错误StringIndexOutofBoundsException字符串下标越界错误ClassCastException类型强制转换异常NegativeArraySizeException数组的长度为负异常NullPointerException非法使用空指针异常Java常见异常类常见异常类RuntimeException子类Java常见异常类常见异常类类名功能描述NumberFormatException非法数据格式异常IllegalArgumentException非法参数异常EmptyStackException栈空异常,对空栈进行操作IllegalAccessException非法访问异常InterruptedException中断异常(常常应用于线程操作中)ClassNotFoundException指定类或接口不存在异常IOException输入/输出异常RuntimeException子类Exception子类Java常见异常类常见异常类NoSuchFieldError找不到指定域错误NoSuchMethodError所调用的方法不存在OutofMemoryError内存不足错误UnknownError系统无法确认的错误UnsatisfiedLinkError连接错误VerifyError代码校验错误VirtualMachineError虚拟机出错,可能JVM错或资源不足InstantiationError企图实例化一个接口或抽象类的错误Java异常类常用方法异常类常用方法Exception(Stringmessage)StringgetMessage()voidprintStackTrace()自定义异常类自定义异常类ClassDevideByMinusExceptionextendsExceptionClassDevideByMinusExceptionextendsExceptionpublicDevideByMinusException(Stringmsg)publicDevideByMinusException(Stringmsg)super(msg);
super(msg);
自定义异常继承于自定义异常继承于自定义异常继承于自定义异常继承于ExceptionException或或或或RuntimeExceptionRuntimeException类类类类异常类唯一有用的就是类型名这个信息异常类唯一有用的就是类型名这个信息异常类唯一有用的就是类型名这个信息异常类唯一有用的就是类型名这个信息如何使用自定义异常?
如何使用自定义异常?
11、生成自定义异常类对象、生成自定义异常类对象22、一定条件下抛出异常对象、一定条件下抛出异常对象33、捕获被抛出的异常、捕获被抛出的异常classTestclassTestpublicintdevide(intx,inty)throwspublicintdevide(intx,inty)throwsArithmeticException,DevideByMinusExceptionArithmeticException,DevideByMinusExceptionif(yo)if(yo)thrownewDevideByMinusException(“thrownewDevideByMinusException(“被除数被除数被除数被除数为负数为负数为负数为负数”);
);
方法不抛出异方法不抛出异常可以吗?
常可以吗?
PublicclassSelfExceptionPublicclass