抽象类/接口 与异常处理机制 主讲:赖国荣 QQ:31343080 www.sms98.cn.

Slides:



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

第 7 章 异常处理. 立体化教材计算机系列 — 《 Java 程序设计》 2 目 录 重点与难点点拨 经典练习题 异常处理机制 异常.
第四章 类、对象和接口.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
第一單元 建立java 程式.
四資二甲 第三週作業 物件導向程式設計.
面向对象的程序设计(一).
Java程序设计 第6章 异 常 处 理.
Oracle数据库 Oracle 子程序.
程設一.
第二章 JAVA语言基础.
Ch07 介面與多重繼承 物件導向程式設計(II).
第14章 c++中的代码重用.
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
第三章 控制结构.
Ch08 巢狀類別 物件導向程式設計(II).
程式設計實作.
第5章 异常处理 王德俊 上海交通大学继续教育学院.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
例外處理(Exception Handling)
Java基础 JavaSE异常.
第七章 异常.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
西南科技大学网络教育系列课程 高级语程序设计(Java) 第五章 继承、接口与范型.
程式設計實作.
继承性 2、继承 为什么会有继承? 父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝”
Java语言程序设计 第五部分 Java异常处理.
第6章 异常的捕获及处理 6.1 异常简介 6.2 异常类的继承结构 6.3 异常处理机制 6.4 异常处理 6.5 本章小结.
Java习题解析.
Java程序设计 第9章 继承和多态.
辅导课程六.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第一次课后作业 1. C/C++/Java 哪些值不是头等程序对象 2. C/C++/Java 哪些机制采用的是动态束定
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
2019/1/16 Java语言程序设计-类与对象 教师:段鹏飞.
异常及处理.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
Java程序设计 第10章 抽象类和接口.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
$9 泛型基础.
Vision for 2007 相片: 南寧德天大瀑布- 靖西通靈大峽谷 – 明仕田園 文字: 阿虫 音樂: 幽蘭逢春 (笛子)
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
Aspect Oriented Programming
第二章 Java基本语法 讲师:复凡.
分裂对象模型 C++ otcl.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
Chapter 18 使用GRASP的对象设计示例.
辅导课程十五.
第二章 Java基本语法 讲师:复凡.
Java程序设计 第17章 异常和断言.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
3.7 Java的异常处理机制.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
第4讲 类和对象、异常处理 ggao.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

抽象类/接口 与异常处理机制 主讲:赖国荣 QQ:31343080 www.sms98.cn

目 标 关联关系 聚合关系 接口与抽象类 异常处理机制 垃圾回收

BookExtend : bookExtend 类的关联关系 关联关系:表示不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。 通过关联关系可以表示对象之间的沟通。 多个对象处于同一个层次上 包括: 一对一关系 一对多关系 多对多关系 Book Int : id String name BookExtend : bookExtend BookExtend int : id String : name

聚合关系 聚合关系是关联关系的一种,是强的关联关系,表示整体与个体的关系。 聚合关系用于对模型元素之间的组装关系进行建模。 汽车由很多零部件组成; 计算机由很多设备组成 图书馆由很多书组成 公司由很多部门组成

抽象类 在java中用abstract关键字来修饰一个类时,这个类叫做抽象类。 抽象类的特点: abstract class className{ } 抽象类的特点: 抽象类不能直接运用new创建对象 抽象类的实体中可以有abstract方法,且abstract方法只允许声明,而不允许实现 abstract returnType method([paramList]); 抽象类中不一定要包含abstract方法,但一个类中包含了abstract方法,则这个类必须声明为abstract类。 抽象类的实现子类必须实现抽象类中所有的abstract方法

接 口 接口:是抽象类的一种,只包含常量和方法的定义,而没有变量和方法的实现,且其方法都是抽象方法。 接口的含义: 所有实现了该特定接口的类看起来都象它。

接口图形例子 Instrument接口 Void play(); String what(); Void adjust(); 乐器 Wind Percussion Stringed implements 风笛 打击乐器 管弦乐器 Woodwinds Void play(); String what(); Brass Void adjust(); extends 木制风笛 铜制风笛

接口的定义 -1 格式如下: 接口声明 [access] interface interfaceName [extends listOfSuperInterface] { type final-var-name1 = value; … type final-var-nameN = value; return-type method-name1 (para-list); return-type method-nameN (para-list); } 接口声明 接口体 1、常量定义 2、方法定义

接口的定义-2 1、 access为public 或没有(默认包访问修饰符)。 2、包括接口声明和接口体;接口体包括常量定义和方法定义。 3、常量被实现该接口的多个类共享; 具有public ,final, static的属性。 4、方法体具有 public和abstract属性。

接口定义例子 Interface Callback{ String name = "interface callback"; void callback(int param); } 错误: void callback(int param){ }

接口的实现-implements 关键字 实现格式: access class classname [ extends superclass ] [implements interface[ , interface…] ]{ //class-body } 1、access是public或没有(默认包访问修饰)。 2、一个类可以实现多个接口,在implements子句中用逗号分开。 3、实现类共享接口中定义的常量为,而且必须实现接口中定义的所有方法。 4、实现接口的方法必须声明成public,且必须严格与接口定义中制定的类型匹配。 5、若多个接口中有相同的方法,只现实一次。 6、可在实现类中定义自己的附加变量或方法。

接口实现的例子 public class Client implements Callback{ //实现接口中定义的方法 public void callback(int p){ System.out.println("callback called with "+p); } //自定义方法 public void nonIfaceMeth(){ System.out.println("define other method");

接口的局部实现--抽象类 如果一个类包含一个接口但是不完全实现接口中定义的方法,那么该类必须定义成abstract型。 例如: abstract class Incomplete implements Callback{ int a,b; void show(){ System.out.println(a + “ “+b); } 任何继承Incomplete的类都必须实现callback()方法,或是自己也定义成abstract类。

接口的应用 1、用接口实现多重继承 2、用接口来实现群组常量的定义 3、可以将接口当成接口类型来使用 4、接口可以扩展

用接口实现多重继承—接口的应用 Java只支持单继承,那么我们可以通过实现接口的方式,让一个类拥有多个类型的操作。 例如: 如果要表示一个X是一个A和一个B以及一个C; X 的抽象类或具体的基类 接口A 接口B 接口C extends implements X 实现类 接口A 接口B 接口C

例如: 实现群组定义—接口的应用 引用的方法:packageName.Months.JANUARY即可代表数字1。 缺点: 缺少安全性。 因为接口中定义的任何字段都是static和final的,可以将接口当成创建常量组的工具。 例如: public interface Months{ int JANUARY = 1, FEBRUARY = 2, MARCH = 3, APRIL = 4, MAY = 5, JUNE = 6, JULY = 7, AUGUST = 8, SEPTEMBER = 9, OCTOBER = 10, NOVERBER= 11, DECEMBER = 12; } 引用的方法:packageName.Months.JANUARY即可代表数字1。 缺点: 缺少安全性。

接口类型的使用—接口的应用 接口可作为一种引用类型来使用。 可创建一个接口类型的类实例对象。 一个接口引用变量仅知道被它的接口定义声明的方法。 Interface A A a = new B(); a.method1(); a.method2(); a.nameA; //B中定义的方法和变量无法调用 //出现编译错误 a.nameB; a.method3(); String nameA; Void method1( ) Void method2( ) implements Class B String nameB; Void method1( ) Void method2( ) Void method3( )

当接口B继承接口A后,将包含method1() 和 method2()两个方法,自己再增加method3() 接口扩展—接口的应用 通过继承可以在新接口中添加新的方法,还可以在新接口中组合数个接口。当一个类实现了该接口,它必须实现接口继承链表中定义的所有方法。 例如: Interface A 当接口B继承接口A后,将包含method1() 和 method2()两个方法,自己再增加method3() Void method1( ) Void method2( ) extends Interface A Interface B Implements Void method1( ) Void method2( ) Void method3( ) Void method3( )

异 常 在程序运行过程中所发生的破坏了正常的指令流程的事件称为例外。 软件和硬件错误都可能导致他们的产生。例如: 用户输入出错 异 常 在程序运行过程中所发生的破坏了正常的指令流程的事件称为例外。 软件和硬件错误都可能导致他们的产生。例如: 用户输入出错 所需文件找不到 运行时磁盘空间不够 内存不够 算术运算错误 (数的溢出,被零除…) 数组下标越界

异常:是在程序执行过程中出现的一个事件,它中断了正常指令的运行。 异 常 异常:是在程序执行过程中出现的一个事件,它中断了正常指令的运行。 错误:偏离了可接受的代码行为的一个动作或一个实例。

异常例子 public class ExceptionDemo{ public class HelloWorld { public static void main (String args[]) { int i = 0; String greetings [] = { "Hello world!", "No, I mean it!", "HELLO WORLD!!" }; while (i < 4) { System. out. println (greetings[ i]); i++; } public class ExceptionDemo{ public static void main(String[] args){ int i = 0; System.out.println(5/i); }

异常处理机制 可分为以下几个步骤: 1)抛出异常:在堆栈中创建一个异常对象。 当方法中有一个错误发生后,该方法创建一个异常对象并把它交给运行系统。异常对象中包含了有关异常的信息,如异常类型、发生错误时的程序状态等。 2)捕获异常:找到异常处理程序。 运行时系统在方法调用堆栈里为被抛出的异常查找处理代码。运行系统从发生错误的方法开始进行回朔,在方法调用堆栈里向后搜索,直到找到能处理当前发生的异常的处理程序的方法。 3)处理异常。 通过方法调用来处理异常。 4)终止或恢复运行。 如果运行时系统在方法调用栈查遍了所有的方法(主方法中)而未找到合适的异常处理程序,则运行时系统终止执行。

与传统的错误处理技术相比,java程序使用异常处理错误有以下优越性: 异常处理的优越性 与传统的错误处理技术相比,java程序使用异常处理错误有以下优越性: 可以把错误代码与常规代码分隔开 可以在调用栈中传播错误 可以对错误类型进行分组

用于显示与Java运行时系统本身有关的错误 捕获的异常,也是用来创建用户异常类型子类的基类。 异常类及其子类 所有异常类型都是 Throwable的子类 用于显示与Java运行时系统本身有关的错误 用户程序可能 捕获的异常,也是用来创建用户异常类型子类的基类。 Error类对象由Java虚拟机生成并抛出; Exception类对象由应用程序处理或抛出。

1、Throwable类是所有例外类型的父类,不能被直接使用,表示任何可以作为异常被抛出的类。 异常类及其子类-2 1、Throwable类是所有例外类型的父类,不能被直接使用,表示任何可以作为异常被抛出的类。 2、Error用来表示编译时和系统错误,表示恢复不是不可能但很困难情况下的一种严重问题。比如说内存溢出,它不可能执行程序处理这样的问题,一般是和VM有关的问题。

异常类及其子类-3 3、Exception是可以被抛出的基本异常类型,在JAVA类库、用户方法以及运行时故障中都可能抛出Exception型异常。 RuntimeException 运行时异常。它表示程序运行正常的话就不会发生这种问题,这种异常不用在程序中把他们列出来,运行时有问题,会自动被JVM抛出。比如空指针异常,数组超出异常。 除了运行时例外之外的其他由Exception 继承来的例外类都是非运行时的例外,例如FileNotFoundException(文件未找到例外)。Java编译器要求在程序中必须处理这种例外,捕获例外或者声明抛弃例外。

异常处理 由五个关键字 try、catch、throw、throws 和 finally 处理异常。 异常处理的两种方式: try-catch-finally语句捕获异常 try{ …… }catch( Exception e){ }finally { } 方法声明时用throws声明方法体内有异常

捕获异常 Try{ ….. }catch(ExceptionName1 e1 ){ } catch(ExceptionName2 e2 ){ } catch(ExceptionNameN eN ){ } finally{ }

捕获异常 try{ }选定捕获例外的范围,由try所限定的代码块中的语句在执行过程中可能会生成例外对象并抛弃。 catch( ){ } 放置异常处理程序。 1、catch必须紧跟在try之后 2、可有多个catch块,但异常类型必须是层层嵌套的,即先从子类异常,最后才到父类异常。 3、当抛出异常时,异常处理机制将负责搜索参数与异常类型相匹配的第一个处理程序。 4、只有匹配的catch子句能执行,和switch不同,不需要break. 5、可通过throwable类提供的方法getMessage(),printStackTrace( ) 来跟踪异常事件发生时执行堆栈的内容。 finally{ }为异常处理提供一个统一的出口或定义跳转流程;该语句永远会被执行。

例子 捕获异常 处理异常 public class CatchException{ public static void main (String args[]) { String greetings [] = { "Hello world!", "No, I mean it!", "HELLO WORLD!" }; for(int i=0;i<4;i++){ try{ System.out.println (greetings[i]); }catch(ArrayIndexOutOfBoundsException e){ System.out.println("ArrayIndexOutOf Exception!"); }finally{ System.out.println("This is always printed!"); } }//end for } } 捕获异常 处理异常 清理或 状态恢复 例子:TryCatchFinallyDemo.java

Throwable类的常用方法 Throwable类的常用方法 getMessage() getStackTrace() 返回异常的原因 getStackTrace() 返回堆栈跟踪情况 printStackTrace() 打印堆栈的标准错误流 printStackTrace(PrintStream s) 打印堆栈的标准打印流 toString() 返回简单描述 ……. 例子:ExceptionMethodDemo.java

声明异常 Throws Exception 一般该方法用在调用第三方工具包的时候。 声明一个异常有两种方法: 如果在一个方法中生成了一个例外,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,该方法就应该声明抛弃例外,使得例外对象可以从调用栈向后传播,直到有合适的方法捕获它为止。这是一种消极的异常处理机制。 一般该方法用在调用第三方工具包的时候。 声明一个异常有两种方法: throw throws   

声明异常 --throw 可以通过throw关键字在可能出现异常的执行语句后面声明抛出一个异常。 格式: throw ThrowableObject; ThrowableObject必须为Throwable类或其子类的对象 例子:ThrowExceptionDemo.java

声明异常 --throws 在一个方法声明时通过throws关键字在声明异常。例如: public int read ( ) throws IOException{   ...... } throws子句中同时可以指明多个例外,之间由逗号隔开。例如: public static void main(String args[ ]) throws   IOException,IndexOutOfBoundsException { … } 例子: ThrowsDemo.java

自定义异常类 声明一个新的异常类,该异常类必须从Java已有定义的异常类继承,如Exception、IOException等。 为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现该类所对应的错误的信息。 例子:DefineExceptionDemo.java

自定义异常类例子 public class MyException extends Exception{ private int x; public MyException( ){ } public MyException( String msg){ super(msg); } public MyException( String msg , int x ){ super(msg); this.x = x; } public int val(){ return x ;} public String getMessage(){ return "Detail Message : "+x+" "+super.getMessage(); 例子:ExtraFeatures.java

垃圾处理器 1、java是通过finalize()方法进行垃圾处理的。 2、可通过System.gc()方法来强制启动垃圾回收器来处理垃圾。 finalize()方法不用在程序中启动,JVM会在需要的时候自己启动该方法进行垃圾处理。 有可能直到程序终止,该方法都不会执行。 2、可通过System.gc()方法来强制启动垃圾回收器来处理垃圾。

总 结 关联关系 聚合关系 接口与抽象类 异常处理机制 垃圾回收