《Java语言程序设计-12-异常处理和文本IO》由会员分享,可在线阅读,更多相关《Java语言程序设计-12-异常处理和文本IO(107页珍藏版)》请在金锄头文库上搜索。
1、Java语言程序设计语言程序设计 海南大学信息科学技术海南大学信息科学技术学院学院海南大学信息科学技术海南大学信息科学技术学院学院 台安台安 第十二章 异常处理和文本I O 学习目标 n理解异常和异常处理 n了解异常的类型 n区别必检异常与免检异常 n在方法头中声明异常 n在方法中抛出异常n在方法中抛出异常 n用try catch块处理异常 n理解异常的传播 n在try catch块中使用finally子句 n了解何时使用异常 n声明自定义异常类 2 目录 12 1 引言 12 2 异常类 12 3 异常处理 12 4 finally子句 12 5 创建自定义异常类 12 5 创建自定义异常类
2、 12 6 File类 12 7 文本I O 3 12 1 引言 计算机编程错误有三类 语法错误 运行错误和逻 辑错误 n出现语法错误语法错误的原因是没有遵循语言的规则 它们可以 由编译器检查发现 n在程序运行过程中 如果运行环境发现了一个不可能执 行的操作 就会出现运行错误运行错误 行的操作 就会出现运行错误运行错误 n如果程序没有按照预期的方案执行 就会发生逻辑错误逻辑错误 4 异常处理机制 异常 程序运行运行过程中出现的非正常现象非正常现象 n如输入错误 除数为零 下标越界 空对象等 Java提供了异常处理机制 n引进很多用来描述和处理异常的类 异常类 n每个异常类反映一类运行错误 异常
3、处理的作用 开发程序时 充分考虑各种意外情况 使程序具 有较强的容错能力容错能力 5 实例 没有使用异常处理 终止终止 6 import java util Scanner public class RuntimeExceptionDemo public static void main String args Scanner scanner new Scanner System in System out println Please enter a integer 从键盘读取用户输入 并转换为一个整数从键盘读取用户输入 并转换为一个整数 int number 如果用户输入如果用户输入 一个
4、浮点数 一个浮点数 则会发生异常则会发生异常 实例 没有使用异常处理 int number scanner nextInt System out println Your input is number 终止终止 7 捕获运行错误 运行错误不是我们想要的 它会引起程序异常终止 需要有某种手段来捕获这个错误 让程序在收到错误信息后 能够继续执行 Java使用 try catch 结构来捕获异常 try catch 程序正常逻辑程序正常逻辑 异常处理代码异常处理代码 包含可能导致包含可能导致 异常的代码异常的代码 异常捕捉器异常捕捉器 包含可能出现异包含可能出现异 常的类别实例常的类别实例 8 出
5、现异常时的出现异常时的 处理代码处理代码 改进版 捕获运行错误 import java util InputMismatchException import java util Scanner public class RuntimeExceptionDemo2 public static void main String args Scanner scanner new Scanner System in try System out println Please enter a integer int number scanner nextInt 若输入异常若输入异常 int number
6、 scanner nextInt System out println Your input is number catch InputMismatchException ex System out println Exception ex getMessage System out println Incorect input System out println end scanner close 程序正常终止程序正常终止 9 异常处理 与 if语句 public class QuotientWithIf public static void main String args Scanne
7、r input new Scanner System in System out print Enter two integers int number1 input nextInt int number2 input nextInt if number2 0 似乎也行 可以似乎也行 可以 取代异常处理取代异常处理 真的等价吗 真的等价吗 10 if number2 0 System out println number1 number2 is number1 number2 else System out println Divisor cannot be zero 取代异常处理取代异常处理
8、 异常处理 与 if语句 public static void main String args Scanner input new Scanner System in System out print Enter two integers int number1 input nextInt if 输入的不是一个整数 输入的不是一个整数 System out println 输入非法 输入非法 return int number2 input nextInt 有有机机会会被执被执行吗 行吗 完完整的处理逻辑整的处理逻辑 伪伪代码代码 11 int number2 input nextInt i
9、f 输入的不是一个整数 输入的不是一个整数 System out println 输入非法 输入非法 return if number2不等不等于零于零 System out println number1 number2 is number1 number2 else System out println Divisor cannot be zero 有有机机会会被执被执行吗 行吗 异常处理 与 if语句 public static void main String args Scanner input new Scanner System in System out print Enter
10、 two integers int number1 input nextInt if 输入的不是一个整数 输入的不是一个整数 System out println 输入非法 输入非法 return int number2 input nextInt 代码代码中放置中放置大大量量的的 if语语句合适句合适吗 吗 完完整的处理逻辑整的处理逻辑 伪伪代码代码 12 int number2 input nextInt if 输入的不是一个整数 输入的不是一个整数 System out println 输入非法 输入非法 return if number2不等不等于零于零 System out prin
11、tln number1 number2 is number1 number2 else System out println Divisor cannot be zero 代码代码中放置中放置大大量量的的 if语语句合适句合适吗 吗 代码代码中放置中放置大大量量的的 if语语句合适句合适吗 吗 异常处理 与 if语句 public static void main String args Scanner input new Scanner System in System out print Enter two integers try int number1 input nextInt in
12、t number2 input nextInt System out println number1 number2 异常处理代码异常处理代码 简洁简洁 13 System out println number1 number2 is number1 number2 catch Exception ex System out println Exception ex getMessage input close 异常处理 异常是由方由方法法抛抛出的出的 应该由方方法的法的调调用用者者捕获异 常并处理异常 14 异常处理 与 方法 public class QuotientWithMethod
13、public static int quotient int number1 int number2 if number2 0 System out println Divisor cannot be zero System exit 1 return number1 number2 public static void main String args 有有什么什么不不合适合适 15 public static void main String args Scanner input new Scanner System in System out print Enter two intege
14、rs int number1 input nextInt int number2 input nextInt int result quotient number1 number2 System out println number1 number2 is result 异常处理 与 方法 public static int quotient int number1 int number2 if number2 0 throw new ArithmeticException Divide zero return number1 number2 public static void main S
15、tring args Scanner input new Scanner System in System out print Enter two integers 主动抛主动抛出异常出异常 16 System out print Enter two integers try int number1 input nextInt int number2 input nextInt int result quotient number1 number2 catch ArithmeticException ex System out println Exception an integer cann
16、ot be divided by zero System out println Execution continues 若除数为若除数为0 被调被调用用者者捕捕获获并处理并处理 异常处理 与 方法 public static int quotient int number1 int number2 if number2 0 throw new ArithmeticException Divide zero return number1 number2 public static void main String args Scanner input new Scanner System in System out print Enter two integers 检测检测错误错误 分离分离 17 System out print Enter two integers try int number1 input nextInt int number2 input nextInt int result quotient number1 number2 catch ArithmeticEx