Java程序设计 第17章 异常和断言.

Slides:



Advertisements
Similar presentations
第四章 类、对象和接口.
Advertisements

C语言程序设计 李伟光.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
第一节 职业生活中的道德与法律 第二节 大学生择业与创业 第三节 树立正确的恋爱婚姻观 第六章 培育职业精神 树立家庭美德.
校园信息管理系统 河北科技大学网络中心 2000/4/10.
班級:行流四甲 組員:497D0004何筱瑩 497D0016鄧宜欣 497D0044呂亭儀 497D0056黃 琪 497D0063賴依淩
面向对象的程序设计(一).
MVC Servlet与MVC设计模式.
算法设计与分析 Algorithm Design and Analysis
第3章 JavaScript语言基础.
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
俄语字母的发音体系 阅读规则.
网络信息资源的开发与设计 主讲教师 罗双兰 广西师范大学教育科学学院.
程設一.
第二章 JAVA语言基础.
程設一.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
API设计实例分析 通用IO API.
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
例外處理(Exception Handling)
Java基础 JavaSE异常.
JSP自定义标签技术的分析与应用 ----Custom Tag 的分析与应用
第8章 Android内容提供者(ContentProvider)应用
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
2018/11/23 面向对象与多线程综合实验-数据库操作 教师:段鹏飞.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
西安交通大学 计算机教学实验中心 大学C++程序设计教程 西安交通大学 计算机教学实验中心
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 14 章 例外處理.
2018/12/3 面向对象与多线程综合实验-网络编程 教师:段鹏飞.
职责链模式.
Java语言程序设计 第五部分 Java异常处理.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
辅导课程十三.
并发机制 结果应该为: 线程 1: 1 线程 1: 2 线程 1: 3 线程 1: 4 线程 1: 5 线程 2: 6 线程 2: 7
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
檔案讀寫與例外處理 (File IO and Exception Handling)
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
$10 可空类型.
專題報告p6 組員:吳家齊    江弘喻.
P2P聊天工具.
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
《JAVA程序设计》 语音答疑 辅导老师:高旻.
第二章 Java基本语法 讲师:复凡.
Ajax编程技术 第六章 调试与错误处理.
潘爱民 C++ Overview 潘爱民
利用JAVA DOM 進行DTD驗證XML文件
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
第3章 JavaScript基本语句.
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
方格紙上畫正方形.
JAVA 程式設計與資料結構 第三章 物件的設計.
C++面向对象程序设计 谭浩强编著 授课教师:姬广永 学习网站:
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
讀取網路資料及JSON開放資料 靜宜大學資管系 楊子青
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
第二章 Java基础语法 北京传智播客教育
Presentation transcript:

Java程序设计 第17章 异常和断言

学习目标 理解异常处理的概念 理解Error、Exception和RuntimeException的差别 理解被检查的异常和不被检查的异常 掌握如何在方法中抛出异常 掌握如何在方法中声明异常 掌握使用try-catch语句处理异常 了解断言的使用

基本概念 异常(exception)是在程序执行期间中断指令的正常流程的事件。 当一个方法中发生错误时,将创建一个对象并将它交给运行时系统,此对象被称为异常对象(exception object)。 创建异常对象并将它交给运行时系统被称为抛出一个异常(throw an exception) 。 应用程序 运行时系统 异常对象

异常产生的原因 Java虚拟机同步检测到一个异常的执行条件。例如: 执行throw语句。 异步异常 表达式违反了正常的语义,例如整数除零。 通过空引用访问实例变量或方法。 访问数组超界。 资源超出了某些限制,例如使用了过多的内存。 执行throw语句。 异步异常 调用Thread类的stop方法。 虚拟机发生内部错误。 Example:HelloWorld.java, ButtonDemo.java

异常类型 Error类定义了被认为是非常严重的错误,程序不应试图恢复它。通常情况下,当这种错误发生的时候,你应当让程序中止。 Exception类表示你的程序中可能会遇到的不是非常严重的错误。它通常受环境影响,应当被处理。例如指定的文件不存在,或输入错误的URL地址,它们通常由用户的错误输入引起的,程序员无法控制,因此应该处理这类异常。 RuntimeException类指明如果程序正确的话,不会出现这种错误。例如ArrayIndexOutOfBoundsException异常,在数组索引没有超出的情况下,永远不会产生该异常。对于此类异常,程序不应隐藏它,而要显现出来。 ClassNotFoundException ArithmeticException IOException Exception NullPointerException RuntimeException Throwable ArrayIndexOutOfBoundsException Error … …

运行时系统处理异常 运行时系统按与方法调用次序相反的次序搜索调用堆栈,寻找一个包含可以处理异常的代码块的方法,这个代码块称为异常处理器(exception handler)。 如果被抛出的异常对象与异常处理器可以处理的类型匹配,运行时系统将异常对象传递给它,这称为捕获异常(catch the exception)。 如果运行时系统彻底搜索了调用堆栈中的所有方法,但没有找到合适的异常处理器,程序则终止。 抛出异常的方法 异常处理 没有异常处理器的方法 有异常处理器的方法 方法调用 main Example:CallStack.java

抛出异常 语法 throw someThrowableObject; public Object pop() { Object obj; if (size == 0) throw new EmptyStackException(); obj = objectAt(size - 1); setObjectAt(size - 1, null); size--; return obj; }

捕获异常或声明方法抛出异常 不被检查的异常(Unchecked Exception)是运行时异常(RuntimeException)和错误(Error)类及它们的子类, 方法不必捕获或指定不被检查的异常。 其它的异常称为被检查的异常(Checked Exception),编译器确保被检查的异常被捕获或声明。 捕获:方法可以通过为异常提供异常处理器来捕获异常。 声明:方法可以在声明中使用throws子句指定可能抛出异常。 方法可以抛出的异常 方法调用throw语句直接抛出的任何异常。 通过调用另一个方法间接抛出的异常。

声明方法抛出异常 如果方法不捕获其中发生的被检查的异常,那么方法必须声明它可以抛出的这些异常。 通过throws子句声明方法可抛出的异常。throws子句由throws关键字和一个以逗号分隔的列表组成,列表列出此方法抛出的所有异常。 例如 public void myMethod() throws IOException { … } Example:ListOfNumbersDeclared.java

捕获异常 Example:ListOfNumbers.java 将可能抛出异常的语句放在try块中。当try块中的语句发生异常时,异常由与try块相关联的异常处理器(catch块)处理。 一个try块后面可以有多个catch块。每个catch块可以处理的异常类型由异常处理器参数指定。异常处理器的参数类型必须是从Throwable派生的类。 当try块中的语句发生异常时,运行时系统将调用第一个与参数类型匹配的异常处理器。如果被抛出的对象可以被合法地赋值给异常处理器的参数,那么系统就认为它是匹配的。 无论try块中是否发生异常,都会执行finally块中的代码。通常用于关闭文件或释放其它系统资源。 语法 try { statements } catch (ExceptionType1 id1) { statements1 } catch (ExceptionType2 id2) { statements2 } finally { statements3 } 当包含catch子句时,finally子句是可选的。 当包含finally子句时,catch子句是可选的。 Example:ListOfNumbers.java

什么时候使用异常 异常通常描述不可预测的错误情况。不要使用异常替代正常的逻辑判断。 异常的优点 将错误处理代码与常规代码分离 将错误沿着调用堆栈向上传递 对错误类型进行分组和区分

断言 断言(assertion)语句用于确保程序的正确性,避免逻辑错误。 语法 在默认情况下,断言不起作用,可用-ea选项激活断言 assert boolean-expression; assert boolean-expression : message; 当布尔表达式式为false时,抛出AssertionError异常。 在默认情况下,断言不起作用,可用-ea选项激活断言 java -ea ClassName java -ea:packageName -da:ClassName