异常处理办法义_第1页
异常处理办法义_第2页
异常处理办法义_第3页
异常处理办法义_第4页
异常处理办法义_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

异常处理办法义第10章异常处理1、异常概述2、异常分类3、获取异常信息4、处理异常5、抛出异常6、自定义异常7、异常的使用原则主要内容10.1异常概述假设一辆轿车发生了故障,可能是某个零件发生了问题,也可能是没有油了如果是由于零件问题,只需要更换零件就可以解决;如果是没有油了,只需要加满油就可以正常行驶了。程序中异常与此类似,就对程序中可能发生异常语句进行处理,使程序能够正常执行。10.1异常概述在程序开发过程中,可能存在各种错误,有些错误是可以必免的,而有些错误却是意想不到的,在Java中把这些可能发生的错误称为异常。图10-1说明了异常类的继承关系。

10.1异常概述10.2异常分类10.2.1可控式异常10.2.2运行时异常10.2.1可控式异常在Java中把那些可以预知的错误,例如从文件中读取数据,对数据库进行操作等,在程序编译时就能对程序中可能存在的错误进行处理,并给出具体的错误信息,我们把这些错误称为可控式异常。10.2.1可控式异常表10-1常见可控式异常及说明方法说明IOException输入输出异常SQLException操作数据库异常classnotfoundexception指定的类不存在NoSuchFieldException属性不存在异常NoSuchMethodException方法未找到异常10.2.1可控式异常【例10-1】在main()方法中使用Class类的forName()方法加载一个不存在的类。try{Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){e.printStackTrace();}10.2.2运行时异常在Java中有些错误是不能被编译器检测到的在进行除法运算时,除数为零;试图把一个不是由数字组成的字符串使用Integer类的parseInt()方法转换为整数。Java的编译器是检测不到的,因而能够正常编译,但是在运行时就会发生异常,这些异常称为运行时异常。表10-2常见运行时异常及说明10.2.2运行时异常方法说明IndexOutOfBoundsException索引越界异常NullPointerException程序遇上了空指针ArithmeticException数学运算异常IllegalArgumentException方法的参数错误ClassCastException类型强制转换异常10.2.2运行时异常【例10-2】在main()方法中创建一个长度为5的数组,并为其第6个元素赋值。int[]array=newint[5];array[5]=6;10.3获取异常信息获取异常信息就好比工厂里某个线路出现故障停电了,电工要从线路中找出现故障的原因,找到了出现故障的原因,就象程序中获取到了异常信息。在Java中类是所有异常类的超类,该类提供了获得异常信息的方法。表10-3获取异常信息的方法及说明10.3获取异常信息方法说明StringgetLocalizedMessage()返回异常的本地化描述StringgetMessage()返回异常的详细消息字符串StringprintStackTrace()显示出异常更深的调用信息StringtoString()获得异常的简短描述10.3获取异常信息【例10-3】使用上述方法输出进行除0运算异常。try{intz=100/0;}catch(Exceptionex){ex.printStackTrace();System.out.println(ex.getMessage());System.out.println(ex.getLocalizedMessage());System.out.println(ex.toString());}10.4处理异常10.4.1使用try-catch处理异常10.4.2使用try-catch-finally处理异常10.4.3使用try-finally处理异常10.4.1使用try-catch处理异常对于程序中可能发生异常的语句,可以将其添加到try-catch语句块中,这样当程序发生异常时,就可以对其进行相应的处理。try{

需要正常执行的语句}catch(Exceptionex){

对异常进行处理的语句}10.4.1使用try-catch处理异常说明:try和catch是进行异常处理的关键字;try和catch之间的大括号内是程序需要正常执行但又可能发生异常的语句;catch后的小括号内是程序需要处理的异常类型;catch后的大括号内是对程序发生的异常进行处理的语句。inta=6;intb=0;try{//try监控区域if(b==0)thrownewArithmeticException();System.out.println("a/b的值是:"+a/b);}catch(ArithmeticExceptione){//catch捕捉异常System.out.println("出现异常,变量b不能为0");}System.out.println("程序正常结束。");int[]intArray=new

int[3];try{for(inti=0;i<=intArray.length;i++){

intArray[i]=i; System.out.println(intArray[i]/(i-3));}}catch(ArithmeticExceptione){System.out.println("除数为0异常。");}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("intArray数组下标越界异常。");}System.out.println("程序正常结束。");10.4.2使用try-catch-finallytry-catch-finally语句块的语法格式如下:try{

需要执行的语句}catch(Exceptionex){

对异常进行处理的语句}finally{

一定会被处理的语句}10.4.2使用try-catch-finally说明:try、catch和finally是进行异常处理关键字try、catch后面的大小括号的作用同try-catch语句。finally后大括号内的语句,不管程序是否发生异常都要执行,因此finally语句块通常用于执行垃圾回收、释放资源等操作。

inti=0;Stringgreetings[]={"Helloworld!","HelloWorld!!","HELLOWORLD!!!"};while(i<4){try{ System.out.println(greetings[i++]);}catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("数组下标越界异常");}finally{ System.out.println("--------------------------");}}10.4.3使用try-finally处理异常对于程序中可能发生异常的语句,可以将其添加到try-finally语句块中,这样当程序发生异常时,就可以在finally语句块中对其进行相应的处理,另外当程序没有发生异常时,执行完try和finally之间的语句后,也将执行finally语句块中的代码,因此可以在finally语句块中放置一些必须执行的代码,比如释放内存资源的代码等等。10.4.3使用try-finally处理异常try-finally语句块的语法格式如下:try{

需要执行的语句}finally{

一定会被处理的语句}

图10-1try、catch、finally语句块的执行10.5抛出异常10.5.1使用throws声明抛出异常10.5.2使用throw语句抛出异常10.5.1使用throws声明抛出异常throws通常用于方法声明,当方法中可能存在异常,却不想在方法中对异常进行处理时,就可以在声明方法时使用throws声明抛出的异常,然后在调用该方法的其他方法中对异常进行处理(如使用try-catch语句或使用throws声明抛出的异常)。10.5.1使用throws声明抛出异常如果需要使用throws声明抛出多个异常,各异常之间要用逗号分隔。数据类型方法名(形参列表)throws异常类1,异常类2,……,异常类n{

方法体;}methodnamethrowsException1,Exception2,..,ExceptionN{}10.5.1使用throws声明抛出异常说明:数据类型是基本数据类型或对象类型;方法名是Java语言的合法标识符;throws是抛出异常的关键字;异常类是Java的异常类或自定义异常类;方法体是该方法需要执行的语句。static

voidpop()throwsNegativeArraySizeException{int[]arr=new

int[-3];//创建数组}public

static

voidmain(String[]args){try{//try语句处理异常信息 pop();//调用pop()方法}catch(NegativeArraySizeExceptione){ System.out.println("pop()方法抛出的异常");}}10.5.2使用throw语句抛出异常在通常情况下,程序发生错误时系统会自动抛出异常,而有时希望程序自行抛出异常,可以使用throw语句来实现。throw语句通常用在方法中,在程序中自行抛出异常,使用throw语句抛出的是异常类的实例,通常与if语句一起使用。10.5.2使用throw语句抛出异常throw语句的语法格式如下:thrownewException("对异常的说明");其中throw是抛出异常的关键字;Exception是异常类(通常使用自定义异常类)。10.5.2使用throw语句抛出异常【例10-7】计算圆的面积。设定圆的半径不能小于20,小于则抛出异常并给出提示信息。ThrowDemoex=newThrowDemo();try{exputeArea(10);//调用方法}catch(Exceptione){System.out.println(e.getMessage());}private

static

final

double

PI=3.14;//圆周率public

voidcomputeArea(doubler)throwsException{

if(r<=20.0){//使用throw语句抛出异常

throw

newException("程序异常:\n半径为:"+r+"\n半径不能小于20。");}else{

doublecircleArea=PI*r*r;//计算圆的面积

System.out.println("半径是"+r+"的圆面积是:"+circleArea);}}10.6自定义异常10.6.1创建自定义异常类10.6.2使用自定义异常类10.6.1创建自定义异常类创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是异常的描述信息,可以通过getMessage()方法获得。例如:publicclassNewExceptionextendsException{publicNewException(Strings){super(s);}}10.6.2使用自定义异常类创建完自定义异常类,我们就可以在程序中使用自定义异常类了。使用自定义异常类可以通过throw语句抛出异常,接下来通过实例来说明自定义异常类的使用10.6.2使用自定义异常类【例10-8】在项目中自定义异常类,然后编写测试类。(1)编写自定义异常类NewException,该类继承自Exception类。在构造方法中,输出异常信息。(2)编写NewExceptionTest类,在sho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论