第七章 异常.

Slides:



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

Java 程序分类 Java Application :是完整程序,需要独立的解 释器解释运行;以 “.java” 为后缀的文件,以 main() 方法作为程序入口,由 java 编译器编译生 成字节码,由 Java 解释器加载执行字节码。 Java Applet 没有 main() 方法作为程序入口,是嵌在.
第 7 章 异常处理. 立体化教材计算机系列 — 《 Java 程序设计》 2 目 录 重点与难点点拨 经典练习题 异常处理机制 异常.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
项目6 通用堆栈.
Java的程式架構與基本觀念 Java語言的歷史 Java程式的開發環境 Java程式的架構 輸出與輸入物件之使用 工具使用方法介紹
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
MVC Servlet与MVC设计模式.
算法设计与分析 Algorithm Design and Analysis
Exception子类的继承关系 Exception ClassNotFoundException
Java程序设计 第6章 异 常 处 理.
第二章 JAVA语言基础.
第5章 进一步讨论对象和类.
第三章 控制结构.
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
Java语言程序设计 清华大学出版社 第9章 网络通信.
例外處理(Exception Handling)
常用工具类.
Java基础 JavaSE异常.
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
第四章 基本輸出入 Java應用程式的輸出入介面有三種,分別是命令提示字元視窗、AWT元件、及Swing元件。本單元先介紹命令提示字元視窗,AWT請看第16、17章,Swing請看第20章。 輸入 輸出.
第 14 章 例外處理.
Java语言程序设计 第五部分 Java异常处理.
第6章 异常的捕获及处理 6.1 异常简介 6.2 异常类的继承结构 6.3 异常处理机制 6.4 异常处理 6.5 本章小结.
第14讲 异常处理 1/.
王豐緒 銘傳大學資訊工程學系 問題: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 哪些值不是头等程序对象
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
JAVA 编 程 技 术 主编 贾振华 2010年1月.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
第二章 Java基本语法 讲师:复凡.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
3.7 Java的异常处理机制.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第6章 异常处理 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
第4讲 类和对象、异常处理 ggao.
判斷(選擇性敘述) if if else else if 條件運算子.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

第七章 异常

知识点 掌握Java规范中非常重要的异常处理机制 会使用try和catch进来捕获和处理异常 掌握如何自定义异常类 掌握使用异常时一般遵守的原则 熟悉Java系统定义的标准异常

7.1异常的分类 Java把程序运行时的可能遇到的错误分为两类: 一类是非致命的,通过某种修正后程序还能继续执行。这类错误叫作异常。 如:文件不存在、无效的下标、空引用、网络断开、打印机脱机、磁盘满了等 另一类是致命的,即程序遇到了非常严重的不正常状态,不能简单恢复执行,这就是错误。如:内存耗尽、系统内部错误等

Public class NullExceptionDemo(){ Car myCar; void start(){ myCar.startEngine(); } Public static void main(stringE[] args){ NullExceptionDemo exceptionDemo=new NullExceptionDemo; exceptionDemo.start(); System.out.println(“start Car”); } }

所有的异常对象都继承自Throwable类的实例 Exception Error IOException Runtime Exception

Error分支用于Java 运行时系统的内部错误和资源耗尽 Exception是要重点掌握的,它也分为两类: Runtime Exception:是编程错误。造型转换、数组越界、访问空指针 非Runtime Exception :是运行时出现的意外。访问错误的URL、读取文件结尾后面的数据 异常处理的任务就是把控制从错误产生的地方转移到能够进行错误处理的地方。

当Java应用程序出现错误时,会产生一个异常对象,这个对象包含了异常的类型和错误出现时程序所处的状态信息。 7.2异常的抛出 当Java应用程序出现错误时,会产生一个异常对象,这个对象包含了异常的类型和错误出现时程序所处的状态信息。 把异常对象递交给Java编译器的过程称为抛出。 一个方法不仅能告诉Java编译器它能返回什么值,还可以告诉Java编译器有可能产生什么样的错.例: public String readline() throw IOException

如何抛出异常 精确定位错误 首先决定抛出异常类型.例如:当从一个长为1024的文件中读取数据时,但 读到688时遇到了文件结束标记,此时应抛出一个异常,EOFException比较合适 代码为:throw new EOFException(); 或: EOFException e= new EOFException(); throw e; 一个方法抛出了异常后,那么它再也不能返回调用者了 String readData(Bufferreader in) throws EOFException { … if(…..) throw new EOFException

class DutyException extends Exception {int age,high,weight; DutyException() {super(); } DutyException(String message) {super(message);

class BodyException extends DutyException { BodyException() {super("体格例外"); } BodyException(String message) {super(message);

class HighException extends BodyException {super("身高例外"); } HighException(int high,int highest,String message) {super(message); this.high=high;

class WeightException extends BodyException {int weightest; WeightException() {super("体重例外"); } WeightException(int weight,int weightest,String message) {super(message); this.weight=weight; public boolean over() {if(weight>weightest)return(true); else return(false);}}

class AgeException extends DutyException { AgeException() {super(“年龄例外”); } AgeException(String message) {super(message); }} class ValueException extends AgeException { ValueException() {super(“年龄不合理例外”); } ValueException(String message) {super(message); } }

class SuitableException extends AgeException { SuitableException() {super("年龄不适合例外"); } SuitableException(int age,int limit,String message) {super(message); this.age=age;

catch指明要捕获的异常及相应处理代码 7.3异常的捕获和处理 异常发生时,Java运行系统从生成的代 码块开始,寻找相应的处理代码,并将 异常交给该方法处理,这一过程叫作捕获 若要捕获一个异常,需要设置一个 try/catch块: try语句括住可能抛出异常的代码段 catch指明要捕获的异常及相应处理代码

代码如下: try{…. } catch(Exception e) {….

例:一个捕获异常的例子 public void read(reader) { try {boolean done=false; while(!done) {String lin=reader.readLine(); if(line==null) done=true; else {……} } } catch(IOException ) {…………}

}catch(ExceptionType1 e){ 抛出exceptionType1时要执行的代码 捕获多个异常 可以在一个try块中捕获多个异常类型,每个异常类型需要个单独的catch子句 try{ 抛出异常代码 }catch(ExceptionType1 e){ 抛出exceptionType1时要执行的代码 } catch(ExceptionType2 e){ 抛出exceptionType2时要执行的代码 } catch(ExceptionType3 e){ 抛出exceptionType3时要执行的代码…….. }

finally子句是一个不管是否出现异常,都必须被执行的程序段,所以常把一些必须被执行的代码放在finally子句里 1。代码不抛出任何异常:try--finally 2。代码抛出一个catch子句能够执行的异常 try--catch--finally 3。代码抛出一个catch子句不能够执行的异常 try--finally

public class ExceptionTest{ public static void high(int high,int weight,int age)throws AgeException,BodyException {if(age<0)throw new ValueException("没这种年龄"); else if(age<20||age>45)throw new SuitableException(); else if(200<high||high<150)throw new HighException(); else if (weight>100)throw new WeightException(weight,100,"太重了"); else if (weight<50)throw new WeightException(); }

public static void main(String args[]) {Integer index=null; int h,w,a; h=Integer.parseInt(args[0]); w=Integer.parseInt(args[1]); a=Integer.parseInt(args[2]);

try { high(h,w,a); } catch(WeightException e) { if(e.over())System.out.println("过重"); e.printStackTrace(); } catch(DutyException e) { System.out.println("in catch area"); System.out.println("getmessage"+e.getMessage()); e.printStackTrace(); } finally {System.out.println(“finally区块”); }}}

一般来说:确切知道如何处理的异常应该捕获,而把那些不知道如何去处理的异常只做抛出,将它传递给调用者去处理。 重置异常 catch(Exception e) { System.err.println ("An exception was thrown"); throw e; } 这个异常会被上层处理

7.4自定义异常类 用处:用于处理用户程序中特定的逻辑运行错误 方法:创建一个Exception和其它异常类的子类, 根据需要重载父类中的方法和属性,使自 定义异常类能够提供完整的错误信息 例:自定义异常类的使用

Import java.io.*; Class MyArithmeticException extends Exception { public MyArithmeticException{} public MyArithmeticException (String message) {super(message); }

Public class CustomizedExceptionDemo{ int div(int d1,int d2) trows MyArithmeticException { if (d2==0) throws new MyArithmeticException( “divide by zero”); return d1/d2; }

public static void main(string[] args){ CustomizedExceptionDemo demo= new CustomizedExceptionDemo try { demo.div(1,0); }catch(MyArithmeticException e) { System.out.println(“Caught exception:”+e.getMessage(); e.printStackTrace(); } } }

7.5常用异常类介绍 ClassNotFoundException 类或接口不存在 IOException 输入输出异常 FileNotFoundException 文件没找到 MalformedURLException URL 不正确 IndexOutofBoundException下标越界异常 ArrayIndexOutofBoundException ArithmeticException 除数为0时产生异常例:ExceptTest.java