您好,欢迎访问三七文档
抽象类和抽象方法抽象类:表示一种抽象概念,不能被实例化一个对象。继承它的子类可以对其进行具体实现。作用:提供一种适当的超类,子类可以通过继承来实现其抽象的方法。抽象方法:是指那些具有方法特征,但没有具体程序代码的方法。抽象类中可以有静态变量、实例变量和非抽象的方法。例:abstractclassinstrument{inti;abstractvoidplay();voidprint(){System.out.println(“instrument!”);}}例:music.javaShape.javaAnimal.java接口接口:常量和空方法的集合。一个类可以同时实现多个接口。接口定义:[public]interface接口名[extendssuper-interface-list]{typeConstantName=value;//常量成员typeMethodName(Parameterlists);//空方法}常量:具有public,static,final属性。方法:具有public,abstract属性。类实现接口:class类名implements接口列表{……}例:通用遥控器,为标准操作定义了一组按钮。RemoteControl.javaTestRemoteControl.java说明:1、当一个类实现接口时,必须实现接口中给出的空方法。2、若实现接口的类是一个抽象类,则可以把实现接口方法的任务交给子类去实现。3、若子类中定义了与父接口中同名的常量或方法,则父接口中的常量或方法将被隐藏。4、接口和类一样,可以作为一种数据类型使用。5、任何实现了接口的类对象都可以是该接口类型的。例:p51.javaTestSort.javaComparable接口接口与抽象类的异同点:相同点:(1)二者都包含空方法,都必须在实现接口或继承抽象类的子类中具体实现这些方法。(2)由于二者都包含空方法,所以不能用new关键字来创建这两种类型的对象。(3)类之间具有继承关系,接口之间也可以具有这种关系,一个接口可以继承一个或多个接口。(4)接口和类一样可以具有public属性。不同点:(1)在抽象类中,在定义空方法时,其名称前必须加abstract关键字,而在接口中不需要。(2)在抽象类中,除空方法外,还可以定义实例变量和非空方法;而在接口中,只能定义常量和空方法。(3)接口允许多继承。一个接口可以继承多个接口,实现接口的类也可以同时实现多个接口。只要在这个类中对每个接口的方法都有具体的实现,但java的类仅支持单继承。这个软件包含一个“发动机”(Motor)实体。行为1:查询发动机的马力,发动机将返回一个表示马力的整数。publicabstractclassMotor{abstractpublicintgetHorsepower();}行为2:查询电驱动发动机的充电时间,发动机将返回一个表示充电时间的整数。publicabstractclassBatteryPoweredMotorextendsMotor{abstractpublicintgetTimeToRecharge();}行为3:查询光驱动发动机能够正常运转所需要的最小流明数,发动机返回一个整数。publicabstractSolarPoweredMotorextendsMotor{abstractpublicintgetLumensToOperate();}既有电驱动又有光驱动的双重驱动发动机。从行为上看,光电驱动的发动机必须同时从两个抽象类派生,但Java语言不允许多重继承。之所以会出现这个问题,根本的原因在于使用抽象类不仅意味着定义特定的行为,而且意味着定义实现的模式。也就是说,应该定义一个发动机如何获得行为的模型,而不仅仅是声明发动机具有某一个行为。通过接口建立行为模型行为1:publicinterfaceMotor(){intgetHorsepower();}行为2:publicinterfaceBatteryPoweredMotorextendsMotor(){intgetTimeToRecharge();}行为3:publicinterfaceSolarPoweredMotorextendsMotor{intgetLumensToOperate();}现在光电驱动的发动机可以描述为:publicclassDualPoweredMotorimplementsSolarPoweredMotor,BatteryPoweredMotor{}DualPoweredMotor只继承行为定义,而不是行为的实现模式。抽象类有它的优点。抽象类能够保证实现的层次关系,避免代码重复。从实践的角度来看,如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能够更有效地分离行为与实现,为代码的维护和修改带来方便。包在Java程序设计中可以将自己编写的许多类,按一定的方法归属于不同的子目录(包)中。在不作特殊声明的情况下,Java将所有的类归属于一个默认包中。package语句格式:packagepkg1[.pkg2[.pkg3]];说明:1、package语句位于java源程序的第一部分。2、Java编译器使用文件系统来保存包。包的层次结构与文件目录结构一致。目录名和包名一致。3、引进包的概念是为了实现访问控制和解决名字冲突。4、如果源文件在c:\myjava\test目录下,在classpath设置中添加”.;c:\myjava\test;”。例:Test.javaimport语句格式:importpackage1[.package2].(class-name|*);说明:1、import语句位于package语句之后,类定义之前。2、*表示java编译器在编译时搜索整个包。例:p523.java访问权限限制对于类的成员变量和方法,有四种访问级别:private、缺省、protected、public。对于类(除内部类),有两种访问级别:public、缺省。类内同包子类同包非子类不同包子类不同包非子类privateT缺省(default)TTTprotectedTTTTpublicTTTTTprivate限定类成员变量和方法,该成员只能被这个类自身访问。限定构造方法,则其他类不能生成该类的实例对象。缺省(default)限定类成员变量和方法,可以被该类本身和同一个包中的类访问。限定构造方法,则除了这个类本身和同一个包中的类之外,其他类不能生成该类的实例。Protected限定类成员变量和方法,可以被这个类本身、它的子类(与该类在同一个包中或在不同包中)以及同一个包中所有其他类访问。public限定类成员变量和方法,可以被所有的类(任何包)访问。限定构造方法,则在所有类中都可以生成该类的实例。例:..\第四章\p416.java异常处理异常就是异常事件,它是程序遇到异常情况所激发的事件。采用了一种面向对象的机制,即把异常看作是一种类型,每当发生这种事件时,java就自动创建一个异常对象,并执行相应的代码去处理该事件。使用异常来管理错误,比传统的错误管理技术有如下优势:1、将错误代码与正常代码分开readFile{openthefile;//打开文件determineitssize;//取得文件的大小allocatethatmuchmemory;//分配内存readthefileintomemory;//读文件内容到内存中closethefile;//关闭文件}errorCodeTypereadFile{initializeerrorCode=0;openthefile;if(theFileIsOpen){determinethelengthofthefile;if(gotTheFileLength){allocatethatmuchmemory;if(gotEnoughMemory){readthefileintomemory;if(readFailed){errorCode=-1;}}else{errorCode=-2;}}else{errorCode=-3;}closethefile;if(theFileDidntClose&&errorCode==0){errorCode=-4;}else{errorCode=errorCodeand-4;}}else{errorCode=-5;}returnerrorCode;}readFile{try{openthefile;determineitssize;allocatethatmuchmemory;readthefileintomemory;closethefile;}catch(fileOpenFailed){doSomething;}catch(sizeDeterminationFailed){doSomething;}catch(memoryAllocationFailed){doSomething;}catch(readFailed){doSomething;}catch(fileCloseFailed){doSomething;}}2、沿着调用堆栈向上传递错误method1{callmethod2;}method2{callmethod3;}method3{callreadFile;}method1{errorCodeTypeerror;error=callmethod2;if(error)doErrorProcessing;elseproceed;}errorCodeTypemethod2{errorCodeTypeerror;error=callmethod3;if(error)returnerror;elseproceed;}errorCodeTypemethod3{errorCodeTypeerror;error=callreadFile;if(error)returnerror;elseproceed;}method1{try{callmethod2;}catch(exception){doErrorProcessing;}}method2throwsexception{callmethod3;}method3throwsexception{callreadFile;}3、将错误分组并区分错误类型7.1异常的层次结构Throwable(定义在java.lang包中)ErrorExceptionRuntimeException…IOExceptionArithmeticException…ArrayIndexOutOfBoundsExceptionFileNotFoundException…EOFExceptionError:描述系统内部错误及资源耗尽的情况,由系统直接处理。Exception:描述应用程序中发生的异常情况RuntimeException:运行期异常IOException:发生I/O操作失败或中断时产生常见异常类型:1、java.lang.ArithmeticException算术运算中0作除数2、java.lang.StringIndexOutOfBoundsException当下标越界时,将产生这种类型的异常。3、java.lang.ArrayIndexOutOfBoundsException数组下标越界4、java.lang.ArrayStoreException将其他类型的对象存入数组,如果类型不兼容,将产生这种类型的异常。5、java.lang.ClassCastException对象转换异常6、java.lang.NegativeArraySizeException创建数组时,如果数组的大小参数为负数,将产生这种类型的异常7、java.lang.NullPointerException引用空对象的实例变量或方法时,将产生这种类型的异常8、NumberFormatException当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该
本文标题:第6章java
链接地址:https://www.777doc.com/doc-2197120 .html