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

下载本文档

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

文档简介

1、6.1 任务预览 本章实训程序运行结果: 6.2 异常 异常,即意外,英文是Exception。 异常通常是程序运行时出现的问题或错误。 【例6-1】编写没有异常处理的除数为0程序。public class Example1 public static void main(String args) int x, y, z;x = 2;y = 0;z = x / y;System.out.println(整数除以0,得: + z);【例6-2】改进例6-1,编写带异常处理的除数为0程序。public class Example2 public static void main(String ar

2、gs) try int x, y, z; x = 2; y = 0; z = x / y; System.out.println(整数除以0,得: + z); catch (Exception e) System.out.println(发生了异常: + e.getMessage(); 6.3 异常种类与层次结构 异常的种类很多,最顶层的异常类是Exception。 ArithmeticException RuntimeException Exception FileNotFoundException IOException Exception NumberFormatException Il

3、legalArgumentException RuntimeException Exception InputMismatchException NoSuchElementException RuntimeException Exception 注意:系统预定义的异常类都以Exception结尾,要求自定义异常类也以该单词结尾,例如MyException。6.4 异常处理代码块异常处理代码块try-catch-finally (1)带参数的try-catch 格式:try 可能发生异常代码 catch (异常类 参数) 异常处理代码 (2)不同异常作不同处理的try-catchcatch. 格

4、式:try 可能发生异常代码 catch (异常类1 参数1) 异常处理代码1 catch (异常类2 参数2) 异常处理代码2 .catch (异常类n 参数n) 异常处理代码n 【例6-3】编写整数除法运算程序,尝试对不同类型异常作不同处理。 import java.util.*;try Scanner scan = new Scanner(System.in); int x, y, z; System.out.println(请输入被除数:); x = scan.nextInt(); System.out.println(请输入除数:); y = scan.nextInt(); z =

5、x/y; System.out.println(整除结果: + z);catch(InputMismatchException e) System.out.println(输入不匹配异常: + e.getMessage();catch(ArithmeticException e) System.out.println(算术异常: + e.getMessage();catch(Exception e) System.out.println(异常: + e.getMessage(); 异常处理代码块 (3)不处理异常的try-finally 格式:try 可能发生异常代码 finally 最终代码

6、 (4)完整的异常处理块try-catchcatch-finally 格式:try 可能发生异常代码 catch (异常类1 参数1) 异常处理代码1 catch (异常类2 参数2) 异常处理代码2 .catch (异常类n 参数n) 异常处理代码n finally 最终代码 【例6-4】在例6-3的main方法后面,增加finally子块,其余代码不变。 finallySystem.out.println(程序结束。); 6.5 throw语句与throws子句 throw语句语法:throw new 异常类构造方法名(参数列表); 如:throw new Exception(除数为零无意

7、义); 使用throws子句在方法中抛出异常的格式如下: 返回类型 方法名(可选参数表) throws 异常类名 自动或主动引发异常的方法体代码【例6-5】编写double型实数除法运算程序,测试实数相除0除数是否会引发异常。 double x, 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】编写d

8、ouble型除法运算方法,要求抛出“除数为零无意义”异常,并且在除法运算方法中不捕获异常。static double divide(double x, double y) throws Exception if (y!=0) return x/y; /除法方法 else throw new Exception(除数为零无意义); /抛出异常语句 public static void main(String args) try double x, y, z; String str; BufferedReader read = while(true) System.out.println(请输入被

9、除数(直接按回车结束程序):); 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(相除结果(保留两位小数):%.2fn, z); catch(Exception e) System.out.println(异常: + e); finally Sys

10、tem.out.println(程序结束。); 6.6 自定义异常类 要继承预定义异常类,如ArithmeticException、Exception等。 【例6-7】自定义一个异常类,在double型除法运算方法中,遇到除数为零,便抛出自定义异常对象。class MyByZeroException extends ArithmeticException public MyByZeroException(String message)super(message); public class Example7 /主类static double divide(double x, double y)

11、 throws Exception if (y!=0) return x/y; else throw new MyByZeroException(除数为零无意义); /抛出自定义异常 6.7 异常处理代码块嵌套 【例6-8】改进例6-7,编写嵌套的异常处理代码块,使之发生除数异常时不终止程序运行。 try /外层异常处理代码块 double x, y, z; String str; BufferedReader read = while(true) System.out.println(请输入被除数(直接按回车结束程序):); str = read.readLine(); if (str.eq

12、uals() break; x = Double.parseDouble(str); System.out.println(请输入除数:); str =read.readLine(); y = Double.parseDouble(str); try /内层异常处理代码块 z = divide(x, y); System.out.printf(相除结果(保留两位小数):%.2fn, z); catch(MyByZeroException e) catch(Exception e) System.out.println(异常: + e); finally System.out.println(程

13、序结束。); 6.8 错误与断言 Exception和Error都是Throwable类的子类, 但错误往往比异常严重,如:断言错误AssertionError。 assert(断言)语句:武断地宣称的语句,如宣称某条件必须成立。 语法有二:assert 条件表达式assert 条件表达式 : 字符串型断言消息 遇到断言错误,如果虚拟机处于启用断言状态,则程序非正常终止。 默认虚拟机总是关闭断言。 断言语句适用程序调试排错。 允许执行断言命令格式:java -ea 主类名【例6-9】编程,输入数据计算平方根,要求加入“负数不能计算平方根”断言语句。 Scanner scan = new Sca

14、nner(System.in);System.out.println(请输入要计算平方根的数:);double x = scan.nextDouble();assert x0 : 负数不能计算平方根; /断言语句double sqroot = Math.sqrt(x);System.out.printf(%.2f的平方根是%.4fn, x, sqroot); 6.9 本章小结 异常是运行过程中出现了意外,无法按常规运行下去。使用try-catch-finally代码块捕获并处理异常。 捕获、处理异常的代码块也可嵌套,以满足复杂的需求。 所有异常类构成树状的层次结构,最顶层的异常类是Exception。 异常可使用throw语句主动精确地抛出。还可把在方法中出现的异常踢给调用它的方法来处理,这时要在方法头部使用throws子句。 除了异常外,还有Error(错误)。错误比异常严重,无法在程序中捕获和处理。例如断言错误、虚拟机本身的错误等。 在断言语句中,如果断言条件不成立

温馨提示

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

最新文档

评论

0/150

提交评论