第6章除法运算-异常处理_第1页
第6章除法运算-异常处理_第2页
第6章除法运算-异常处理_第3页
第6章除法运算-异常处理_第4页
第6章除法运算-异常处理_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第6章除法运算——异常处理能力目标:学会使用try-catch-finally代码块处理异常。学会使用throw语句主动抛出异常,使用throws子句从方法声明中抛出异常。理解自定义异常类,了解断言语句。能运用异常处理机制编写整数、实数除法运算程序。世界上最真情的相依,是你在try我在catch。无论你发神马脾气,我都默默承受,静静处理。1内容介绍6.1任务预览6.2异常6.3异常种类与层次结构6.4异常处理代码块try-catch-finally6.5throw语句与throws子句6.6自定义异常类6.7异常处理代码块嵌套6.8错误与断言6.9本章小结6.10实训6:除法运算程序26.1任务预览本章实训程序运行结果:

3Java异常类层次结构图4JAVA异常体系在

Java中,所有的异常都有一个共同的祖先Throwable(可抛出)。Throwable指定代码中可用异常传播机制通过Java应用程序传输的任何问题的共性。Throwable:

有两个重要的子类:Exception(异常)和Error(错误),二者都是Java异常处理的重要子类,各自都包含大量子类。Exception(异常):是程序本身可以处理的异常。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理

56.2异常异常,即意外,英文是Exception。异常通常是程序运行时出现的问题或错误。【例6-1】编写没有异常处理的除数为0程序。publicclassExample1{ publicstaticvoidmain(String[]args){ intx,y,z; x=2; y=0; z=x/y; System.out.println("整数除以0,得:"+z); }}6【例6-2】改进例6-1,编写带异常处理的除数为0程序。publicclassExample2{ publicstaticvoidmain(String[]args){

try{ intx,y,z; x=2; y=0; z=x/y; System.out.println("整数除以0,得:"+z); }

catch(Exceptione){ System.out.println("发生了异常:"+e.getMessage()); } }}76.3异常种类与层次结构异常的种类很多,最顶层的异常类是Exception。ArithmeticException→RuntimeException→ExceptionFileNotFoundException→IOException→ExceptionNumberFormatException→IllegalArgumentException→RuntimeException→ExceptionInputMismatchException→NoSuchElementException→RuntimeException→Exception注意:系统预定义的异常类都以Exception结尾,要求自定义异常类也以该单词结尾,例如MyException。8Java异常类层次结构图96.4异常处理代码块

try-catch-finally(1)带参数的try-catch格式:try{可能发生异常代码}catch(异常类参数){异常处理代码}(2)不同异常作不同处理的try-catch…catch.格式:try{可能发生异常代码}catch(异常类1参数1){异常处理代码1}catch(异常类2参数2){异常处理代码2}...catch(异常类n参数n){异常处理代码n}10【例6-3】编写整数除法运算程序,尝试对不同类型异常作不同处理。11importjava.util.*;…

try{ Scannerscan=newScanner(System.in); intx,y,z; System.out.println("请输入被除数:"); x=scan.nextInt(); System.out.println("请输入除数:"); y=scan.nextInt(); z=x/y; System.out.println("整除结果:"+z); }

catch(InputMismatchExceptione){ System.out.println("输入不匹配异常:"+e.getMessage()); }

catch(ArithmeticExceptione){ System.out.println("算术异常:"+e.getMessage()); }

catch(Exceptione){ System.out.println("异常:"+e.getMessage()); }…异常处理代码块(3)不处理异常的try-finally格式:try{可能发生异常代码}finally{最终代码}(4)完整的异常处理块try-catch…catch-finally格式:try{可能发生异常代码}catch(异常类1参数1){异常处理代码1}catch(异常类2参数2){异常处理代码2}...catch(异常类n参数n){异常处理代码n}finally{最终代码}12【例6-4】在例6-3的main方法后面,增加finally子块,其余代码不变。

finally{ System.out.println("——程序结束。"); }

13try...finally用于资源关闭try...finally结构也是保证资源正确关闭的一个手段。如果你不清楚代码执行过程中会发生什么异常情况会导致资源不能得到清理,那么你就用try对这段"可疑"代码进行包装,然后在finally中进行资源的清理。14try...finally用于资源关闭的例子15public

void

readFile(){

BufferedReaderreader=null;

try

{

try

{

reader=new

BufferedReader(new

InputStreamReader(

new

FileInputStream("file")));

//dosomeotherwork

//closereader

}finally

{

reader.close();

}

}catch

(FileNotFoundExceptione){

e.printStackTrace();

}catch

(IOExceptione){

e.printStackTrace();

}

}6.5throw语句与throws子句throw语句语法:thrownew异常类构造方法名(参数列表);如:

thrownewException("除数为零无意义");使用throws子句在方法中抛出异常的格式如下:…返回类型方法名(可选参数表)throws异常类名{

自动或主动引发异常的方法体代码}16【例6-5】编写double型实数除法运算程序,测试实数相除0除数是否会引发异常。17… doublex,y,z; x=23.5; y=0; z=x/y; System.out.println("正实数除以零结果:"+z); x=-52.6; z=x/y; System.out.println("负实数除以零结果:"+z); x=0; y=0; z=x/y; System.out.println("零除以零结果:"+z);…【例6-6】编写double型除法运算方法,要求抛出“除数为零无意义”异常,并且在除法运算方法中不捕获异常。…staticdoubledivide(doublex,doubley)throwsException{if(y!=0){returnx/y;}//除法方法

else{thrownewException("除数为零无意义");//抛出异常语句

}}publicstaticvoidmain(String[]args){try{doublex,y,z; Stringstr; BufferedReaderread=… while(true){ System.out.println("请输入被除数(直接按回车结束程序):"); str=read.readLine();if(str.equals("")){break;} x=Double.parseDouble(str); System.out.println("请输入除数:"); str=read.readLine();y=Double.parseDouble(str); z=divide(x,y);//调用除法方法

System.out.printf("相除结果(保留两位小数):%.2f\n",z);}}catch(Exceptione){System.out.println("异常:"+e);}

finally{System.out.println("——程序结束。");}…186.6自定义异常类要继承预定义异常类,如ArithmeticException、Exception等。【例6-7】自定义一个异常类,在double型除法运算方法中,遇到除数为零,便抛出自定义异常对象。classMyByZeroExceptionextendsArithmeticException{ publicMyByZeroException(Stringmessage){

super(message);//调用超类构造方法 }}publicclassExample7{//主类

staticdoubledivide(doublex,doubley)throwsException{ if(y!=0){returnx/y;} else{

thrownewMyByZeroException("除数为零无意义"); }//抛出自定义异常

}…19异常消息异常消息的表示方法ee.toString();//获得异常种类和错误信息e.getMessage();//获得错误信息e.printStackTrace()://在控制台打印出异常种类,错误信息和出错位置等206.7异常处理代码块嵌套【例6-8】改进例6-7,编写嵌套的异常处理代码块,使之发生除数异常时不终止程序运行。21…

try{//外层异常处理代码块

doublex,y,z;Stringstr; BufferedReaderread=… while(true){ System.out.println("请输入被除数(直接按回车结束程序):"); str=read.readLine();if(str.equals("")){break;} x=Double.parseDouble(str);System.out.println("请输入除数:");str=read.readLine();y=Double.parseDouble(str);

try{//内层异常处理代码块

z=divide(x,y); System.out.printf("相除结果(保留两位小数):%.2f\n",z); }catch(MyByZeroExceptione){…} } }catch(Exceptione){System.out.println("异常:"+e);}

finally{System.out.println("——程序结束。");}…Java异常类层次结构图22Error(错误)

Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM(Java虚拟机)出现的问题。例如,Java虚拟机运行错误(VirtualMachineError),当JVM不再有继续执行操作所需的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(VirtualMachineError)、类定义错误(NoClassDefFoundError)等。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在Java中,错误通过Error的子类描述。236.8错误与断言错误往往比异常严重,如:断言错误AssertionError。assert(断言)语句:武断地宣称的语句,如宣称某条件必须成立。语法有二:assert条件表达式assert条件表达式:字符串型断言消息遇到断言错误,如果虚拟机处于启用断言状态,则程序非正常终止。默认虚拟机总是关闭断言。断言语句适用程序调试排错。允许执行断言命令格式:java-ea主类名24【例6-9】编程,输入数据计算平方根,要求加入“负数不能计算平方根”断言语句。… Scannerscan=newScanner(System.in); System.out.println("请输入要计算平方根的数:"); doublex=scan.nextDouble();

assertx>0:"负数不能计算平方根";//断言语句

doublesqroot=Math.sqrt(x); System.out.printf("%.2f的平方根是%.4f\n",x,sqroot);…256.9本章小结异常是运行过程中出现了意外,无法按常规运行下去。使用try-catch-finally代码块捕获并处理异常。捕获、处理异常的代码块也可嵌套,

温馨提示

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

评论

0/150

提交评论