第6章面向对象程序设计基础(下)课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第6章面向对象程序设计基础(下)课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 基础 课件
- 资源描述:
-
1、面向对象程序设计基础(下)q包和jar文件q静态属性q静态方法q限定符q接口q内部类q枚举包(package)n在操作系统中,目录用来组织文件,设置权限。nJava利用包来组织相关的类,并控制访问权限。n包是一种松散的类的集合。一般不要求处于同一个包中的类有明确的相互关系,如包含、继承等等。n由于同一包中的类在缺省情况下可以互相访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。n利用包来管理类,可实现类的共享与复用(类库)。编译单元n一个java源代码文件称之为一个编译单元。n一个编译单元中只能有一个public类,该类名与文件名相同。编译单元中的其他类是该主public类的
2、支撑类。n经过编译,编译单元中的每个类都产生一个 .class文件。njava的工作程序是一串.class文件,JAVA解释器负责寻找、加载和解释这些文件。(不象其它语言最终生成一个.exe的可执行文件)类的名字空间n所有类成员的名字都是相互隔离的。类A中的方法m1与类B中的方法m1互不相干,但类名就有冲突的问题了。n在一个Java程序运行过程中,某些类会从internet上自动下载,而用户并不知晓。所以在java中需要名字空间的完全控制,以便可以建立一个唯一的类名。n包用于类的名字空间管理。n作为包的设计人员,利用包来划分名字空间以避免类名冲突(package 和 import)包与目录n一
3、个包可以包含若干个类文件,还可包含若干包。n一个包要放在指定目录下。nCLASSPATH环境变量指定搜寻包的路径。n包名本身又对应一个目录(用一个目录表示)。p3 p2d:d1d2类classpath=d:d1;d:d1d2 p1包对应的目录编译单元与当前包n显式指定编译单元的当前包。package 包名;n编译单元对当前包可以读写。n在一个编译单元中,只能有一个package语句,且为第一个语句。n包名可以有层次,以小数点分割。n包名一般全小写(类名第一个字母大写)。n如果编译单元中无package语句,则隐含的当前包是一个无名包(放在当前目录下)。n实际编程中不提倡在无名包中定义类。包和源
4、文件的存储位置n多数开发工具会按照包名对应的目录结构存储源文件。下面的图右侧显示了在NetBeans工程中,源文件和编译生成的类文件所在的目录结构。package bo;public class Login /实现代码hrMgnsrcbuildclassesboboLogin.javaLogin.class使用包中的类nimport语句将指定包中的类引入当前的名字空间,即告诉编译到哪去找程序中使用的类。n import语句必须出现在所有类定义之前,但应在包声明之后。例:import java.util.*;该语句引入整个utility 类库(标准Java库的一部分)例:import java.
5、util.Vector;该语句只引入Vector类,但utility类库中的其他类不可用。从包中加载类n当程序需要建立一个类的对象,或是第一次访问类的静态成员时,会动态加载类文件。nJAVA解释器加载类过程:=将环境变量CLASSPATH包含的一个或多个目录作为起始目录。=解释器取出包名,将小数点换成斜杠,产生以CLASSPATH目录为起点的查找路径。=查找目录下的.class文件nimport p1.p2.*转换为 p1p2*.class 或 p1/p2/*.class (取决于操作系统)编译单元与包n不管“当前包”是显式指定还是采用隐含值,总是当前名字空间的一部分。nimport语句是将其
6、他包的类引入当前的名字空间。n对象三步曲:=打开包(import)=加载类(程序中只有类定义的一份拷贝)=建对象(用new运算符可以创建一个类的若干实例)编译单元当前包 package其他包其他包 import使用javac创建包对应的目录package mypk;public class TestPkjavac d d:TestPk.java 会在该d:下建包目录import mypk.*;public class Test public static void main(String args)TestPk tp=new TestPk();.set CLASSPATH=d:;%CLASSP
7、ATH%1jar文件njar是JDK提供的一个实用工具,可将多个类文件压缩在一个文件中,生成的文件的扩展名为.jar,默认的压缩算法为zip。njar的用法:jar cf j.jar *.class 建立jar文件 jar tf j.jar 列出jar文件中包含的所有文件njar文件将类文件打包成一个文件,方便了类文件的分发,jar文件也被称为类库文件互联网上的jar文件n互联网上有很多类库供开发者使用,其中Apache组织的Jakarta Commons项目包含了许多实用类库,可在http:/commons.apache.org下载这些类库。Jakarta commons类库下载页面Mann
8、ing出版社的Jakarta Commons书d:liblib1.jar;d:liblib2.jar;%classpath%jar文件和CLASSPATH环境变量n如果在编译或运行时需要使用jar类库提供的类,可以将jar文件列入在classpath环境变量中,这样javac和java这两个指令在执行时都会在classpath所指定的jar文件中搜索需要的类文件。n例如,假设某2个jar文件分别为lib1.jar和lib2.jar,存放d:lib目录中,如果在编译或运行Java程序时需要引用这两个jar文件中的类,则可在控制面板-系统对话框中将classpath环境变量的值设置为:类变量(静态
9、变量)n类变量为类的各实例共享的变量。static 静态变量;n位于类的内存区域中,为该类的各个对象共享.n无此限定符的变量是实例变量。class ex int i;static int j;static final int k=10;-n为节省空间,final 常量可同时 定义为static类exjk=10对象1i :3对象2i :5类变量(静态变量)n实现各实例之间的通讯。n跟踪创建的实例数。public class Count private int serial;/成员变量 private static int counter=0;/类变量 public Count()counter+
10、;serial=counter;n静态变量类似于某些语言中的全局变量。类变量(静态变量)n非private 的静态变量无须创建实例就可以从类的外部访问。public class StaticVar public static int x ;public class test public void m()int m=StaticVar.x;2类变量(静态变量)class PhoneCard200static final String connectNumber=“200”;static double additoryFee;long cardNumber;int password;boolea
11、n connected;double balance;3类变量(静态变量)public class a public static void main(String args)PhoneCard200 my200_1=new PhoneCard200();PhoneCard200 my200_2=new PhoneCard200();PhoneCard200.additoryFee=0.1;System.out.println(“第一张200卡的接入号码:”+my200_1.connectNumber);System.out.println(“200卡接入号码:”+PhoneCard200.c
12、onnectNumber);System.out.println(“第二张200卡的附加费:”+my200_2.additoryFee);System.out.println(“200卡类的附加费:”+PhoneCard200.additoryFee);类方法(静态方法)n类方法:static 方法名()n使用类方法不用创建类的对象。调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名。n非static的方法是对象方法(或称实例方法)。n类方法中不能访问实例变量,而只能访问类变量(static方法 static域)和自己的方法参数。n类方法中不能直接使用本类中的实例方法,只能使用其他的
13、static方法。n类方法中没有this值。类方法(静态方法)public class a public static void main(String args)System.out.println(Math.round(3.54);String s=to_char(2.718);System.out.println(“e=“+s);static String to_char(double x)return Double.toString(x);4类方法(静态方法)nmain方法是静态方法,这是为了系统在没有任何实例化对象之前可以运行一个应用程序。n如果main方法要调用本类的其它方法:=将
14、这些方法设计成静态方法,=创建对象,使用对象方法。n一个静态方法不能被一个非静态方法所覆盖。静态导入nJDK1.5引入了静态导入:import static 包名.类名.静态属性或方法名;或 import static 包名.类名.*;n通过静态导入,使用类中的静态成员时,可以省略成员前的类名。n例:import static java.lang.Math.*;/导入Math类所有静态成员 import static java.lang.Math.sin;/明确导入Math的sin方法 /double r1=Math.sin(2*Math.PI);/以前的调用方式 double r2=sin(
15、2*PI);/静态导入后,简化的调用方式类的初始化-静态初始化器n由关键字static引导的一对大括号括起的语句组。用来完成类的初始化的工作,n与构造方法的区别:=构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化;=构造方法是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用执行;=不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。5小结类与对象n面向对象的数据和方法:=一个类的对象虽然具有相同的属性,但却各不相同(属性值不同)。=一个类的对象方法虽然具有相同的代码,但表现不同,因为方法所操作的对象(数据)不
16、同。n共享的数据和方法:=类属性在同一类的实例中共享数据(该数据不属于一个对象,而属于一个类)。=类方法不需要实例就能使用静态的方法和数据,虽然它们也能通过实例来访问。小结类与对象n类名.属性名 静态属性,在类的空间里,是该类对象共享的单元 n类名.方法名 静态方法 类方法的调用 n类方法和属性也可以用对象名调用,但最好用类名=通过静态导入,可以直接使用静态属性名或静态方法名(JDK1.5)n对象名.属性名 实例变量。提倡通过方法操作属性。n对象名.方法名 方法调用又称“消息传递”,实际上就是给指定对象发送消息:告诉它做什么,向它要信息(方法的返回值)。小结类与对象n访问一个类:=创建该类的对
17、象,并使用该类对象的可见属性与方法。=调用该类的可见静态方法,访问该类的可见静态属性。=继承该类。nfinal=final类不能被继承。=final 方法不能被覆盖。=final 属性不能被修改。访问控制符n访问控制符是一组起到限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。n类访问控制符=公共类 :public 类名 =一般类n一个包中的类只能访问另一个包中的public类。n一般类只能在同一包中使用,一个包中的类不用说明可相互访问。n把常在一起协同工作的类放在一个包里是很自然的。n一个类作为整体对程序的其他部分可见,并不能代表类内的所有域和方法也同时对程序的其他部分可见,前者
18、只是后者的必要条件 n属性和方法的可见性属性和方法的访问限定符public公共属性和公共方法,可被任何类使用。protected可被同包中其他类使用。可被子类继承(包括位于不同包中的子类)不同包,只能被继承,不能使用无访问限定符 可被同包中其他类使用。不同包,不能使用,也不能继承private只限在本类内使用。属性和方法的访问限定符n为了使对象具有良好的封装性,一般将类的非静态属性设计成私有。n为了使其它类或对象能够访问这些私有属性,本类必须提供访问私有属性的方法(公共方法)。n按照惯例,读私有属性的方法取名为get 写私有属性的方法取名为 set,get/set后面跟上属性的名称,其中属性的
19、第一个字母要大写。这些方法在术语上叫做Setter/Getter方法。接口n“接口”和抽象类有些类似。n接口中的方法都是没有方法体的抽象方法。n接口中只能定义 static final 属性。n接口定义的仅仅是实现某一特定功能的一组功能的对外接口和规范,而并没有真正地实现这个功能。n接口的功能实现是在“继承”了这个接口的各个类中完成的,由这些类来具体定义接口中所有抽象方法的方法体。n通常把对接口的“继承”称为“实现”。接口的实现Object类Abstract class classfinal class接口classjava单重继承继承实现接口的定义 public interface 接口名
20、extends 父接口名列表 /常量域声明 public static final 域类型 域名=常量值;/抽象方法声明 public abstract 返回值类型 方法名(参数列表);n接口是由常量和抽象方法组成的特殊类。接口的实现public class MyApplet extends Applet implements Runnable,MouseListener n一个类只能有一个父类,但是它可以同时实现若干个接口。如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多继承。ninstanceof 运算符可用来判断一个对象的类是否实现了某个接口。接口例inte
21、rface CalArea double pi=3.14;double calRArea(double r);class CalAreaImp implements CalArea public double calRArea(double r)return pi*r*r ;public void main(String args)CalAreaImp imp=new CalAreaImp();if(imp instanceof CalArea)/此处返回true System.out.println(imp.calRArea(5);6接口的规定n类定义中使用 implements 指定实现某
22、一接口n类中必须具体实现该 interface 中定义的抽象方法。n实现的方法必须指定为public限定符。n实现接口的类要实现接口的全部方法。如果不需要某个方法,也要定义成一个空方法体的方法。public 方法名()接口类型的变量和实现类的实例n可以声明接口类型的变量和接口类型的参数。n接口的实现类和接口之间的存在着类型兼容性,由于这个原因,所以:=接口类型的变量可以接受传递给它的实现类的实例=接口类型的参数可以接受传递给它的实现类的实例n利用接口类型的变量或参数存储实现类的实例,是面向对象编程的重要方法多态接口类型变量和参数示例interface I void doSome();class
展开阅读全文