资源预览内容
第1页 / 共54页
第2页 / 共54页
第3页 / 共54页
第4页 / 共54页
第5页 / 共54页
第6页 / 共54页
第7页 / 共54页
第8页 / 共54页
第9页 / 共54页
第10页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
JAVA 基础知识(二) -内部培训资料,抽象类(abstract) 接口(interface) 异常 线程,代表一个抽象概念的类 没有具体实例对象的类,不能使用new方法进行实例化 类前需加修饰符abstract 可包含常规类能够包含的任何东西,例如构造方法,非抽象方法 也可包含抽象方法,这种方法只有方法的声明,而没有方法的实现,抽象类,抽象类是类层次中较高层次的概括,抽象类的作用是让其他类来继承它的抽象化的特征抽象类中可以包括被它的所有子类共享的公共行为抽象类可以包括被它的所有子类共享的公共属性在程序中不能用抽象类作为模板来创建对象;在用户生成实例时强迫用户生成更具体的实例,保证代码的安全性,抽象类存在的意义,抽象类声明的语法形式为 abstract class Number . . . 如果写: new Number(); 编译器将显示错误,抽象类的声明,抽象方法 声明的语法形式为 public abstract (.); 仅有方法头,而没有方法体和操作实现 具体实现由当前类的不同子类在它们各自的类声明中完成 抽象类可以包含抽象方法,抽象方法,Example:绘图的例子,各种图形都需要实现绘图方法,可在它们的抽象父类中声明一个draw抽象方法 abstract class GraphicObject int x, y;void moveTo(int newX, int newY) . . . abstract void draw(); ,然后在每一个子类中重写draw方法,例如: class Circle extends GraphicObject void draw() . . . class Rectangle extends GraphicObject void draw() . . . ,一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体,即重写父类中的所有抽象方法只有抽象类才能具有抽象方法,即如果一个类中含有抽象方法,则必须将这个类声明为抽象类除了抽象方法,抽象类中还可以包括非抽象方法,抽象类需要注意的问题,抽象方法的优点 隐藏具体的细节信息,所有的子类使用的都是相同的方法头,其中包含了调用该方法时需要了解的全部信息强迫子类完成指定的行为,规定其子类需要用到的“标准”行为,抽象方法的优点,接口 与抽象类一样都是定义多个类的共同属性 使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现 允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体 也可以包含基本数据类型的数据成员,但它们都默认为static和final,接口,接口的作用 是面向对象的一个重要机制 实现多继承,同时免除C+中的多继承那样的复杂性 建立类和类之间的“协议” 把类根据其实现的功能来分别代表,而不必顾虑它所在的类继承层次;这样可以最大限度地利用动态绑定,隐藏实现细节 实现不同类之间的常量共享 接口允许我们为对象之间定义共同行为,接口的作用,接口的语法 声明格式为 接口修饰符 interface 接口名称 extends 父接口名 /方法的原型声明或静态常量 接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字,接口的语法,接口声明(例1),保险公司的例子 具有车辆保险、人员保险、公司保险等多种保险业务,在对外提供服务方面具有相似性,如都需要计算保险费(premium)等,因此可声明一个Insurable 接口,public interface Insurable public int getNumber(); public int getCoverageAmount(); public double calculatePremium(); public Date getExpiryDate(); ,Insurable 接口声明如下,可见其中的方法都是抽象方法,接口的实现 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象 利用接口设计类的过程,称为接口的实现,使用implements关键字 语法如下 public class 类名称 implements 接口名称 /* Bodies for the interface methods */ /* Own data and methods. */ 必须实现接口中的所有方法 来自接口的方法必须声明成public,接口的实现,对象可以被转型为其所属类实现的接口类型 getNumber 、calculatePremium是Insurable接口中声明的方法 getMileage是Car类新添加的方法,Insurable接口中没有声明此方法 Car jetta = new Car(); Insurable item = (Insurable)jetta; /对象转型为接口类型 item. getNumber(); item.calculatePremium(); item.getMileage(); / 接口中没有声明此方法,不可以 jetta.getMileage(); / 类中有此方法,可以 (Car)item).getMileage(); / 转型回原类,可调用此方法了,对象转型,例2,声明一个接口Shape2D,可利用它来实现二维的几何形状类Circle和Rectangle 把计算面积的方法声明在接口里 pi值是常量,把它声明在接口的数据成员里 interface Shape2D /声明Shape2D接口final double pi=3.14; /数据成员一定要初始化public abstract double area(); /抽象方法 在接口的声明中,允许省略一些关键字,也可声明如下 interface Shape2D double pi=3.14; double area(); ,例3,声明Circle与Rectangle两个类实现Shape2D接口,class Circle implements Shape2D double radius;public Circle(double r)radius=r;public double area() return (pi * radius * radius); ,class Rectangle implements Shape2D int width,height;public Rectangle(int w,int h) width=w;height=h;public double area()return (width * height);,类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定 一个类一次可以实现若干个接口,但是只能扩展一个父类 (接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。,接口和抽象类的区别,多重继承 Java的设计以简单实用为导向,不允许一个类有多个父类 但允许一个类可以实现多个接口,通过这种机制可实现多重继承 一个类实现多个接口的语法如下 类修饰符 class 类名称 implements 接口1,接口2, ,多重继承(接口),Car类可以实现接口Insurable,Drivable,Sellable public class Car implements Insurable, Drivable, Sellable ,多重继承(接口),声明Circle类实现接口Shape2D和Color Shape2D具有pi与area()方法,用来计算面积 Color则具有setColor方法,可用来赋值颜色 通过实现这两个接口,Circle类得以同时拥有这两个接口的成员,达到了多重继承的目的 interface Shape2D /声明Shape2D接口final double pi=3.14; /数据成员一定要初始化public abstract double area(); /抽象方法 interface Colorvoid setColor(String str); /抽象方法 ,多重继承(接口),异常处理 在进行程序设计时,错误的产生是不可避免的。所谓错误,是在程序运行过程中发生的异常事件,这些事件的发生将阻止程序的正常运行如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?Java语言具有特定的运行错误处理机制,异常处理简介,错误 程序运行过程中发生的异常事件 根据错误的严重程度不同,可分为两类 错误 致命性的,用户程序无法处理 Error类是所有错误类的父类 异常 非致命性的,可编制程序捕获和处理 Exception类是所有异常类的父类,异常处理的简介,又称为例外,是特殊的运行错误对象 是面向对象规范的一部分,是异常类的对象 Java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了 该运行错误的信息 处理错误的方法 每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常,异常的基本概念,再对异常进行分类 非检查型异常 不能期望程序捕获的异常(例如数组越界,除零等) 继承自RuntimeException 在方法中不需要声明,编译器也不进行检查 检查型异常 其他类型的异常 如果被调用的方法抛出一个类型为E的检查型异常,那么调用者必须捕获E或者也声明抛出E(或者E的一个父类),对此编译器要进行检查,异常的基本概念,java处理错误的方法 抛出(throw)异常 在方法的运行过程中,如果发生了异常,则该方法生成一个代表该异常的对象并把它交给运行时系统,运行时系统便寻找相应的代码来处理这一异常 捕获(catch)异常 运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回溯,直到找到包含相应异常处理的方法为止,Java处理错误的方法,再对异常进行分类 非检查型异常 不能期望程序捕获的异常(例如数组越界,除零等) 继承自RuntimeException 在方法中不需要声明,编译器也不进行检查 检查型异常 其他类型的异常 如果被调用的方法抛出一个类型为E的检查型异常,那么调用者必须捕获E或者也声明抛出E(或者E的一个父类),对此编译器要进行检查,Java预定义的一些常见异常 ArithmeticException 整数除法中除数为0 NullPointerException 访问的对象还没有实例化 NegativeArraySizeException 创建数组时元素个数是负数 ArrayIndexOutOfBoundsException 访问数组元素时,数组下标越界 ArrayStoreException 程序试图向数组中存取错误类型的数据 FileNotFoundException 试图存取一个并不存在的文件 IOException 通常的I/O错误,预定义的一些常见异常,import java.io.*; 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 (greetingsi);i+; ,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号