异常及处理.

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

多元評量與 Greenfoot 簡介 南港高中高慧君. 演講大綱 多元評量 高中階段程式設計教學目標與困境 Greenfoot 快速入門 – 袋熊吃樹葉 – 沙灘螃蟹 Greenfoot 臺灣社群介紹 2.
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
项目6 通用堆栈.
檔案處理.
Java程序设计教程 第一讲 Java概述.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
算法设计与分析 Algorithm Design and Analysis
第五章 字符串.
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
Ch07 介面與多重繼承 物件導向程式設計(II).
第三章 控制结构.
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
Java语言程序设计 清华大学出版社 第9章 网络通信.
例外處理(Exception Handling)
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
Java基础 JavaSE异常.
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
本單元介紹何謂變數,及說明變數的宣告方式。
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
第四章 基本輸出入 Java應用程式的輸出入介面有三種,分別是命令提示字元視窗、AWT元件、及Swing元件。本單元先介紹命令提示字元視窗,AWT請看第16、17章,Swing請看第20章。 輸入 輸出.
抽象类 File类 String类 StringBuffer类
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
第 14 章 例外處理.
Java语言程序设计 第五部分 Java异常处理.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
例外處理與 物件序列化(Exception Handling and Serialization of Objects)
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
專題報告p6 組員:吳家齊    江弘喻.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
辅导课程八.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第二章Java基本程序设计.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

异常及处理

● 编程中的错误 1、编译错误 程序出现语法问题和拼写问题,不能通过由源代码到字节码的编译。由JAVA语言的编译系统负责检测和报告。 如,程序某语句缺少该有的分号(;),标识符大小写错误,关键字(保留字)写错等。 当编译时,系统自动给出提示。如 C:\jdk\bin>javac TryTest.java TryTest.java:7: 期望 ';' String s="abc" ^ 1 个错误 (应按错误灵活检查)

2、运行错误 (分为系统错误、逻辑错误) 系统错误:运行时引发操作系统问题。如死循环、死机等。比较隐晦。 逻辑错误:不能实现设计意图。例如运算符写错,计算结果相应不正确。 运行错误的排除:利用JDB调试程序 C:\jdk\bin>javac -g TryTest.java C:\jdk\bin>jdb TryTest Initializing jdb... > stop at TryTest:6 Deferring breakpoint TryTest:6. It will be set after the class is loaded. >run …… step 或用jdb直接进入,并可用?/help得到帮助 使用exit/quit 退出

● 异常与异常类 我们编制的程序首先假定用户在使用时,不会对0整数去做除法,不会去找不存在的文件,不会去打开不存在的网点……,但实际上这些漏洞(bug)经常存在。 ∴ 在编程时,在发生这样的错误时至少应完成以下工作: 报告错误和导致错误原因 对错误进行处理 必要时正常终止程序并尽量保存数据 JAVA 语言利用异常处理机制(Exception)处理程序可能发生的错误。

▲异常(Exception)(/例外) 异常是异常事件(Exception event)的简称,通常指的是在程序运行中导致正常程序流程中断的事件。 异常类----代表一种运行错误,类中包含了该运行错误的信息和处理错误的方法等。 异常处理机制:当发生可识别错误,系统产生相应异常类的对象,系统启用相应机制去处理它,以保证运行安全。 JAVA 异常处理机制的核心任务----将系统的控制权从发生错误的指令处转移到对错误进行处理的地方。

▲异常类 在JAVA语言中,被处理的是异常类的一个对象,是系统类Throwable或其子类的实例。 异常类结构图:参照p-157-158 Throwable Error Exception ………… R ArithmeticException 算术错误 NumberFormatException IOException 输入输出错误 ClassNotFountException

Error 错误类定义严重的错误 ,在大多数情况下,当遇到这样的错误时,建议让程序中断。比如说内存溢出。不可能指望程序能处理这样的情况。 Exception 异常类定义程序所遇到的轻微错误,可以写代码来处理异常并继续程序执行,而不是让程序中断。 如: ArithmeticException—整数被0除,运算得出的结果。 int i =12 / 0; NullPointerException—当对象没被实例化时,访问对象的属性或方法的尝试: Date d= null; System.out.println(d.toString()); ArrayIndexOutOfBoundsException—访问超过数组大小范围的一个元素的尝试。

▲抛出异常 方法需要抛出异常的四种情况: ⑴ 在方法中调用了本身会抛出异常的方法。 (间接抛出) ⑵ 在方法设计中,对不能处理的情况人为的生成了一个异常对象,并用throw语句抛出。 ⑶ 程序出现非法操作,如整数除法0为除数。 ⑷ JAVA 系统发生内部错误。

第一种情况:方法调用了本身会抛出异常的方法 import java.io.*; public class throwr { public static void main(String args[]) { char c; System.out.print("请输入一个字符: "); c=(char)System.in.read(); System.out.println("你输入的是: "+c); }} //类throwr调用了System.in.read()方法,其本身抛出了一个IOException 异常类。 // System.in.read()方法定义为:public abstract int read()throws IOException 运行结果:

C:\jdk\bin>javac throwr.java throwr.java:6: 未报告的异常 java.io.IOException ;必须被捕获或被声明抛出 c=(char)System.in.read(); ^ 1 个错误 处理办法:1、捕获异常 (用try-catch)p19例 2、间接抛出: import java.io.*; public class throwr { public static void main(String args[])throws IOException { char c=‘ ’; System.out.print("请输入一个字符: "); System.out.println("你输入的是: "+c); }}

第二种情况,因程序功能,人为使用throw抛出。 需要利用程序来抛出。例如,用程序处理一个保存职工工资信息的文件,工资数据显然不为负,读文件时若发现负,则必须抛出一个异常来说明这个错误。 要抛出异常首先必须依据异常类创建一个异常对象。 格式: 异常类型 异常对象变量名=new 异常类型的构造方法() (异常类型的构造方法有两种:有参数串/无参数串) 例如:(DataFormatException---数据格式发生错误) DataFormatException e=new DataFormatException(“工资数据为负数”); throw e; (=throw new DataFormatException(“工资数据为负数”);)

例:某加工资的方法,保证工资必须是正增长 public int changegz(int jgz) throws DataFormatException{ if (jgz>=0){ 正常处理的语句;} else // 产生了非正常的情况,该抛出异常了。 {throw new DataFormatException(“工资数据为负数”);} return (oldgz+jgz); }

如果一个方法要抛出异常,方法体格式一般为: public 方法返回值类型 方法名(方法的参数表)throws 异常类型{ 语句; if (正常情况){ 正常处理的语句;} else // 产生了非正常的情况,该抛出异常了。 { throw new 异常类型的构造方法();} return 正常返回值; } (注意:当这个方法发生了异常,不会向调用者返回值,所以return语句只需要考虑返回程序的正常结果)

创建异常类 虽然JAVA系统定义了很多异常类,但在实际设计时,可能遇到一些无法用它们来描述的错误。如,前面所说的工资为负,用DataFormatException---数据格式发生错误类型来描述有些牵强,这时,可自定义异常类型。 例题,ThrowTest.java 除0异常的创建和抛出

截获和处理异常 一旦方法抛出了异常,程序中应有对应的方法来截获这个异常并处理。否则,程序将终止运行。 截获和处理异常的简单格式: try { 正常语句; 可能产生异常的语句或方法调用;} catch(异常类型 异常对象变量) {对这个异常对象变量进行处理的语句;}; 例如: try{c=(char)System.in.read(); }catch(IOException e) {}; catch语句对try短语括号中的语句进行监视管理,其后的括号里是它所关心的异常类型,出现则被激活。

再例如:(截获多异常) try { anArray[i]=anArray[i+1]/intx; // 有可能下标出界,产生异常 // 也可能intx为0错误 } catch( ArrayIndexOutOfBoundsEcxeption e) { System.err.println(“……”); // 对异常的处理 } catch( ArithmeticException e1) { System.out.println(“除数为0错误!”)}

try必须与catch或finally中的一个配对使用 …… } catch (……){ …… } finally { finally语句定义一个总是执行的代码块,而不考虑异常是否被捕获。

使用异常处理的原则 考虑到异常处理机制时间开销大,异常处理应遵循以下原则。 1、能用条件判断来识别和处理就不用异常处理 try {a=inty/intx; catch( ArithmeticException e1) { System.out.println(“除数为0错误!”)} ====== a=inty/intx; if (intx=0){……} 2、尽量合并try语句 ,把多处错误尽可能放在一个try里。 3、对很少发生的异常不必处理,可用空的处理语句。

AccountOverdrawnException—当有了这个要取出比帐户上更多的钱的尝试时。 一级实验:处理一个异常 1. 编写程序,故意声明但不创建对象(不实例化),使产生NullPointerException(当对象没被实例化时,访问对象的属性或方法的尝试异常)。 2. 使用try和catch语句捕获。 二级实验:创建自己的异常 创建银行顾客的类并附加下述异常: AccountOverdrawnException—当有了这个要取出比帐户上更多的钱的尝试时。 InvalidDepositException—当无效钱数(小于0)存入时。