版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、能力目标:能力目标:n学会使用学会使用try-catch-finally代码块处理异常。代码块处理异常。n学会使用学会使用throw语句主动抛出异常,使用语句主动抛出异常,使用throws子句子句从方法声明中抛出异常。从方法声明中抛出异常。n理解自定义异常类,了解断言语句。理解自定义异常类,了解断言语句。n能运用异常处理机制编写整数、实数除法运算程序。能运用异常处理机制编写整数、实数除法运算程序。世界上最真情的相依,是你在世界上最真情的相依,是你在try我在我在catch。无。无论你发神马脾气,我都默默承受,静静处理。论你发神马脾气,我都默默承受,静静处理。1/n6.1 任务预览任务预览n6.
2、2 异常异常n6.3 异常种类与层次结构异常种类与层次结构n6.4 异常处理代码块异常处理代码块try-catch-finallyn6.5 throw语句与语句与throws子句子句n6.6 自定义异常类自定义异常类n6.7 异常处理代码块嵌套异常处理代码块嵌套n6.8 错误与断言错误与断言n6.9 本章小结本章小结n6.10 实训实训6:除法运算程序:除法运算程序2/n本章实训程序运行结果:本章实训程序运行结果: 3/4/n在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。
3、nThrowable: 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。nException(异常)(异常):是程序本身可以处理的异常。nError(错误)(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。n注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理5/n异常异常,即意外,英文是,即意外,英文是Exception。n异常通常是程序运行时出现的问题或错误。异常通常是程序运行时出现的问题或错误。n【例例6-1】编写没有异常处理的除数为编写没有异常处理的除数为0程序。程序。public
4、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/public class Example2 public static void main(String args) try int x, y, z; x = 2; y = 0; z = x / y; System.out.println(整数除以整数除以0,得:,得: + z); catch (Exception e) System.out
5、.println(发生了异常:发生了异常: + e.getMessage(); 7/n异常的种类很多,异常的种类很多,最顶层最顶层的异常类是的异常类是Exception。nArithmeticException RuntimeException ExceptionnFileNotFoundException IOException ExceptionnNumberFormatException IllegalArgumentException RuntimeException ExceptionnInputMismatchException NoSuchElementException Run
6、timeException Exceptionn注意:系统预定义的异常类都以注意:系统预定义的异常类都以Exception结尾结尾,要求自定义,要求自定义异常类也以该单词结尾,例如异常类也以该单词结尾,例如MyException。8/9/n(1)带参数的)带参数的try-catch 格式:格式:try 可能发生异常代码可能发生异常代码 catch (异常类异常类 参数参数) 异常处理代码异常处理代码 n(2)不同异常作不同处理的)不同异常作不同处理的try-catchcatch. 格式:格式:try 可能发生异常代码可能发生异常代码 catch (异常类异常类1 参数参数1) 异常处理代码异常
7、处理代码1 catch (异常类异常类2 参数参数2) 异常处理代码异常处理代码2 .catch (异常类异常类n 参数参数n) 异常处理代码异常处理代码n 10/11 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 = x/y; System.out.println(整
8、除结果:整除结果: + 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(); /n(3)不处理异常的)不处理异常的try-finally 格式:格式:try 可能发生异常代码可能发生异常代码 fina
9、lly 最终代码最终代码 n(4)完整的异常处理块)完整的异常处理块try-catchcatch-finally 格式:格式:try 可能发生异常代码可能发生异常代码 catch (异常类异常类1 参数参数1) 异常处理代码异常处理代码1 catch (异常类异常类2 参数参数2) 异常处理代码异常处理代码2 .catch (异常类异常类n 参数参数n) 异常处理代码异常处理代码n finally 最终代码最终代码 12/ finallySystem.out.println(程序结束。程序结束。); 13/ntry.finally结构也是保证资源正确关闭的一个手段。n如果你不清楚代码执行过程中
10、会发生什么异常情况会导致资源不能得到清理,那么你就用try对这段可疑代码进行包装,然后在finally中进行资源的清理。14/15public void readFile() BufferedReader reader = null; try try reader = new BufferedReader(new InputStreamReader( new FileInputStream(file); / do some other work / close reader finally reader.close(); catch (FileNotFoundException e) e.pr
11、intStackTrace(); catch (IOException e) e.printStackTrace(); /nthrow语句语法:语句语法:throw new 异常类构造方法名异常类构造方法名(参数列表参数列表);n如:如:throw new Exception(除数为零无意义除数为零无意义);n使用使用throws子句在方法中抛出异常的格式如下:子句在方法中抛出异常的格式如下: 返回类型返回类型 方法名方法名(可选参数表可选参数表) throws 异常类名异常类名 自动或主动引发异常的方法体代码自动或主动引发异常的方法体代码16/17double x, y, z;x = 23.
12、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);/static double divide(double x, double y) throws Exception if (y!=0) return x/y; /除法方法除法方法 else throw new Exception(除数为零
13、无意义除数为零无意义); /抛出异常语句抛出异常语句 public static void main(String args) try double x, y, z; String str; BufferedReader read = while(true) System.out.println(请输入被除数(直接按回车结束程序):请输入被除数(直接按回车结束程序):); str = read.readLine(); if (str.equals() break; x = Double.parseDouble(str); System.out.println(请输入除数:请输入除数:); st
14、r = read.readLine(); y = Double.parseDouble(str); z = divide(x, y); /调用除法方法调用除法方法 System.out.printf(相除结果(保留两位小数):相除结果(保留两位小数):%.2fn, z); catch(Exception e) System.out.println(异常:异常: + e); finally System.out.println(程序结束。程序结束。); 18/n要继承预定义异常类,如要继承预定义异常类,如ArithmeticException、Exception等。等。n【例例6-7】自定义一个
15、异常类,在自定义一个异常类,在double型除法运算方法中,遇到除数型除法运算方法中,遇到除数为零,便抛出自定义异常对象。为零,便抛出自定义异常对象。class MyByZeroException extends ArithmeticException public MyByZeroException(String message)super(message); /调用超类构造方法调用超类构造方法public class Example7 /主类主类static double divide(double x, double y) throws Exception if (y!=0) retur
16、n x/y; else throw new MyByZeroException(除数为零无意义除数为零无意义); /抛出自定义异常抛出自定义异常 19/n异常消息的表示方法异常消息的表示方法 e e.toString(); /获得异常种类和错误信息 e.getMessage(); /获得错误信息 e.printStackTrace():/在控制台打印出异常种类,错误信息和出错位置等20/n【例例6-8】改进例改进例6-7,编写嵌套的异常处理代码块,编写嵌套的异常处理代码块,使之发生除数异常时不终止程序运行。使之发生除数异常时不终止程序运行。21 try /外层异常处理代码块外层异常处理代码块
17、double x, y, z; String str; BufferedReader read = 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 /内层异常处理代码块内层异常处
18、理代码块 z = divide(x, y); System.out.printf(相除结果(保留两位小数):相除结果(保留两位小数):%.2fn, z); catch(MyByZeroException e) catch(Exception e) System.out.println(异常:异常: + e); finally System.out.println(程序结束。程序结束。); /22/n Error(错误)(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。 大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机
19、运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。 这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。 这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。在
20、 Java中,错误通过Error的子类描述。23/n错误往往比异常严重,如:断言错误错误往往比异常严重,如:断言错误AssertionError。 nassert(断言)(断言)语句:武断地宣称的语句,如宣称某条件必语句:武断地宣称的语句,如宣称某条件必须成立。须成立。 语法有二:语法有二:assert 条件表达式条件表达式assert 条件表达式条件表达式 : 字符串型断言消息字符串型断言消息n遇到断言错误,如果虚拟机处于启用断言状态,则程序非正遇到断言错误,如果虚拟机处于启用断言状态,则程序非正常终止。常终止。 n默认虚拟机总是关闭断言。默认虚拟机总是关闭断言。 断言语句适用程序调试排错。
21、断言语句适用程序调试排错。n允许执行断言命令格式:允许执行断言命令格式:java -ea 主类名主类名24/ Scanner scan = new Scanner(System.in);System.out.println(请输入要计算平方根的数:请输入要计算平方根的数:);double x = scan.nextDouble();assert x0 : 负数不能计算平方根负数不能计算平方根; /断言语句断言语句double sqroot = Math.sqrt(x);System.out.printf(%.2f的平方根是的平方根是%.4fn, x, sqroot); 25/n异常是运行过程中
22、出现了意外,无法按常规运行下去。使用异常是运行过程中出现了意外,无法按常规运行下去。使用try-catch-finally代码块捕获并处理异常。代码块捕获并处理异常。n捕获、处理异常的代码块也可嵌套,以满足复杂的需求。捕获、处理异常的代码块也可嵌套,以满足复杂的需求。n所有异常类构成树状的层次结构,最顶层的异常类是所有异常类构成树状的层次结构,最顶层的异常类是Exception。n异常可使用异常可使用throw语句主动精确地抛出。还可把在方法中出现的语句主动精确地抛出。还可把在方法中出现的异常踢给调用它的方法来处理,这时要在方法头部使用异常踢给调用它的方法来处理,这时要在方法头部使用throws子子句。句。n除了异常外,还有除了异常外,还有Error(错误)。错误比异常严重,无法在程序(错误)。错误比异常严重,无法在程序中捕获和处理。例如断言错误、虚拟机本身的错误等。中捕获和处理。例如断言错误、虚拟机本身的错误等。n在断言语句中,如果断言条件不成立,就发生了断言错
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年天津职业技术师范大学单招职业倾向性测试题库及参考答案详解一套
- 2026年常德科技职业技术学院单招职业技能考试题库含答案详解
- 2026年甘肃省定西地区单招职业倾向性考试题库及参考答案详解1套
- 2026年安徽国防科技职业学院单招职业倾向性考试题库含答案详解
- 2026年湖北省黄冈市单招职业适应性测试题库及参考答案详解1套
- 2026年河南水利与环境职业学院单招职业适应性测试题库及答案详解一套
- 美容顾问岗位面试题及服务技巧含答案
- 中国铁路郑州局集团有限公司2026大专(高职)毕业生招聘工作声明笔试重点题库及答案解析
- 2026年湖北省黄石市单招职业适应性考试题库附答案详解
- 2026年曲阜远东职业技术学院单招职业倾向性测试题库及参考答案详解1套
- 2025秋湘美版(新教材)小学美术三年级上册知识点及期末测试卷及答案
- 2025年人力资源部工作总结暨2026年工作计划
- 2025中原农业保险股份有限公司招聘67人笔试备考重点题库及答案解析
- GB/T 27572-2025橡胶密封件110 ℃热水供应管道的管接口密封圈材料规范
- 红日药业医学事务专员面试流程及题库含答案
- 建筑工程管理专科实践报告
- 2025年国家统计局齐齐哈尔调查队公开招聘公益性岗位5人考试笔试备考试题及答案解析
- 2025湖北武汉市公安局蔡甸区分局第二批招聘警务辅助人员43人考试笔试备考题库及答案解析
- 学堂在线 雨课堂 学堂云 海权与制海权 结业考试答案
- 深圳大学考试答题纸
- 市政道路开通机动车出入口施工方案
评论
0/150
提交评论