清华大学Java课件 f_第1页
清华大学Java课件 f_第2页
清华大学Java课件 f_第3页
清华大学Java课件 f_第4页
清华大学Java课件 f_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计基础(下),类变量(静态变量),类变量为类的各实例共享的变量。static静态变量;位于类的内存区域中,为该类的各个对象共享.无此限定符的变量是实例变量。classexinti;staticintj;staticfinalintk=10;-为节省空间,final常量可同时定义为static,类exjk=10,对象1i:3,对象2i:5,类变量(静态变量),实现各实例之间的通讯。跟踪创建的实例数。publicclassCountprivateintserial;/成员变量privatestaticintcounter=0;/类变量publicCount()counter+;serial=counter;静态变量类似于某些语言中的全局变量。,类变量(静态变量),非private的静态变量无须创建实例就可以从类的外部访问。publicclassStaticVarpublicstaticintx;publicclasstestpublicvoidm()intm=StaticVar.x;,1,类变量(静态变量),classPhoneCard200staticfinalStringconnectNumber=“200”;staticdoubleadditoryFee;longcardNumber;intpassword;booleanconnected;doublebalance;,2,类变量(静态变量),publicclassapublicstaticvoidmain(Stringargs)PhoneCard200my200_1=newPhoneCard200();PhoneCard200my200_2=newPhoneCard200();PhoneCard200.additoryFee=0.1;System.out.println(“第一张200卡的接入号码:”+my200_1.connectNumber);System.out.println(“200卡接入号码:”+PhoneCard200.connectNumber);System.out.println(“第二张200卡的附加费:”+my200_2.additoryFee);System.out.println(“200卡类的附加费:”+PhoneCard200.additoryFee);,类方法(静态方法),类方法:static方法名()使用类方法不用创建类的对象。调用这个方法时,应该使用类名做前缀,而不是某一个具体的对象名。非static的方法是对象方法(或称实例方法)。类方法中不能访问实例变量,而只能访问类变量(static方法static域)和自己的方法参数。类方法中不能直接使用本类中的实例方法,只能使用其他的static方法。类方法中没有this值。,类方法(静态方法),publicclassapublicstaticvoidmain(Stringargs)System.out.println(Math.round(3.54);Strings=to_char(2.718);System.out.println(“e=“+s);staticStringto_char(doublex)returnDouble.toString(x);,3,类方法(静态方法),main方法是静态方法,这是为了系统在没有任何实例化对象之前可以运行一个应用程序。如果main方法要调用本类的其它方法:将这些方法设计成静态方法,创建对象,使用对象方法。一个静态方法不能被一个非静态方法所覆盖。,类的初始化-静态初始化器,由关键字static引导的一对大括号括起的语句组。用来完成类的初始化的工作,与构造方法的区别:构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化;构造方法是在用new运算符产生新对象时由系统自动执行,而静态初始化器则是在它所属的类加载入内存时由系统调用执行;不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。,4,小结类与对象,面向对象的数据和方法:一个类的对象虽然具有相同的属性,但对象却各不相同(属性值不同)。一个类的对象方法虽然具有相同的代码,但表现不同,因为方法所操作的对象(数据)不同。共享的数据和方法:类属性在同一类的实例中共享数据(该数据不属于一个对象,而属于一个类)。类方法不需要实例就能使用静态的方法和数据,虽然它们也能通过实例来访问。,小结类与对象,类名.域名静态域,在类的空间里,是该类对象共享的单元类名.方法名静态方法类方法的调用类方法及域也可以用对象名调用,但最好用类名对象名.属性名实例变量。提倡通过方法操作属性。对象名.方法名方法调用又称“消息传递”,实际上就是给指定对象发送消息:告诉它做什么,向它要信息(方法的返回值)。,小结类与对象,访问一个类:创建该类的对象,并使用该类对象的可见属性与方法。调用该类的可见静态方法,访问该类的可见静态属性。继承该类。finalfinal类不能被继承。final方法不能被覆盖。final域不能被修改。,包(package),在操作系统中,目录用来组织文件,设置权限。Java利用包来组织相关的类,并控制访问权限。包是一种松散的类的集合。一般不要求处于同一个包中的类有明确的相互关系,如包含、继承等等。由于同一包中的类在缺省情况下可以互相访问,所以为了方便编程和管理,通常把需要在一起工作的类放在一个包里。利用包来管理类,可实现类的共享与复用(类库)。,编译单元,一个java源代码文件称之为一个编译单元。一个编译单元中只能有一个public类,该类名与文件名相同。编译单元中的其他类是该主public类的支撑类。经过编译,编译单元中的每个类都产生一个.class文件。java的工作程序是一串.class文件,JAVA解释器负责寻找、加载和解释这些文件。(不象其它语言最终生成一个.exe的可执行文件),类的名字空间,所有类成员的名字都是相互隔离的。类A中的方法m1与类B中的方法m1互不相干,但类名就有冲突的问题了。在一个Java程序运行过程中,某些类会从internet上自动下载,而用户并不知晓。所以在java中需要名字空间的完全控制,以便可以建立一个唯一的类名。包用于类的名字空间管理。作为包的设计人员,利用包来划分名字空间以避免类名冲突(package和import),包与目录,一个包要放在指定目录下。classpath指定搜寻包的路径。一个包可以包含若干个类文件,还可包含若干包。包名本身又对应一个目录(用一个目录表示)。包名可以有层次,以小数点分割。包名一般全小写(类名第一个字母大写)。,p3,p2,d1,d2,类,classpath=d:d1;d:d1d2,p1,包,编译单元与包,对象三步曲:打开包(import,package)加载类(程序中只有类定义的一份拷贝)建对象(用new运算符可以创建一个类的若干实例),编译单元,当前包package,其他包,其他包import,编译单元与当前包,显式指定编译单元的当前包。package包名;编译单元对当前包可以读写。在一个编译单元中,只能有一个package语句,且为第一个语句。如果编译单元中无package语句,则隐含的当前包是一个无名包(放在当前目录下)。无名包中的类是为了局部应用。不管“当前包”是显式指定还是采用隐含值,总是当前名字空间的一部分。,使用其他包中的类,import语句将指定包中的类引入当前的名字空间,即告诉编译到哪去找程序中使用的类。import语句不加载包中的类。import语句必须出现在所有类定义之前。例:importjava.util.*;该语句引入整个utility类库(标准Java库的一部分)例:importjava.util.Vector;该语句只引入Vector类,但utility类库中的其他类不可用。,从包中加载类,当程序需要建立一个类的对象,或是第一次访问类的静态成员时,会动态加载类文件。JAVA解释器加载类过程:将环境变量CLASSPATH包含的一个或多个目录作为起始目录。解释器取出包名,将小数点换成斜杠,产生以CLASSPATH目录为起点的查找路径。查找目录下的.class文件importp1.p2.*转换为p1p2*.class或p1/p2/*.class(取决于操作系统),创建包、添加类,packagemypk;publicclassmyc,javacdd:myc.java会在指定目录下建包,importmypk.*;publicclasstestapublicstaticvoidmain(Stringargs)mycc=newmyc();.,setCLASSPATH=.;d:;%CLASSPATH%,5,jar文件,jarcfj.jar*.class建立jar文件jartfj.jar列表jar文件java-cpj.jartest执行jar文件中的类,访问控制符,访问控制符是一组起到限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。类访问控制符公共类:public类名一般类一个包中的类只能访问另一个包中的public类。一般类只能在同一包中使用,一个包中的类不用说明可相互访问。把常在一起协同工作的类放在一个包里是很自然的。,一个类作为整体对程序的其他部分可见,并不能代表类内的所有域和方法也同时对程序的其他部分可见,前者只是后者的必要条件域和方法的可见性,域和方法的访问限定符,6,域和方法的访问限定符,为了使对象具有良好的封装性,一般将类的实例变量设计成私有。为了使其它类或对象能够访问私有实例变量,本类必须提供访问私有变量的方法(公共方法)。按照惯例,读私有变量的方法取名为get写私有变量的方法取名为set,接口,“接口”是抽象类的概念。接口中的方法都是没有方法体的抽象方法。接口中只能定义staticfinal属性。接口定义的仅仅是实现某一特定功能的一组方法的对外接口和规范,而并没有真正地实现这个功能。接口的功能实现是在“继承”了这个接口的各个类中完成的,由这些类来具体定义接口中所有抽象方法的方法体。通常把对接口的“继承”称为“实现”。,接口的实现,Object,类,Abstractclass,class,finalclass,接口,class,java单重继承,继承,实现,接口的定义,publicinterface接口名extends父接口名列表/常量域声明publicstaticfinal域类型域名=常量值;/抽象方法声明publicabstract返回值类型方法名(参数列表);接口是由常量和抽象方法组成的特殊类。,接口的实现,publicclassMyAppletextendsAppletimplementsRunnable,MouseListener一个类只能有一个父类,但是它可以同时实现若干个接口。如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多继承。instanceof运算符可用来判断一个对象的类是否实现了某个接口。,接口例,interfaceCalAreadoublepi=3.14;doublecal(doubler);classaimplementsCalAreapublicdoublecal(doubler)returnpi*r*r;,7,接口的规定,类定义中使用implements指定实现某一接口类中必须具体实现该interface中定义的抽象方法。实现的方法必须指定为public限定符。实现接口的类要实现接口的全部方法。如果不需要某个方法,也要定义成一个空方法体的方法。Public方法名(),接口的应用,声明多个类必须实现的方法。编程者可以把用于完成特定功能的方法组织成相对独立的集合体接口。凡是需要实现这种特定功能的类,都必须实现这个接口。利用接口模拟多继承。java程序中的类层次结构是树状结构,这种树状结构在处理某些复杂问题时会显得力不从心。接口在保持单继承优点的前提下,使Java程序的类层次结构更加合理,更符合实际情况。只说明对象的编程接口,而不揭示实际的类体。类库分发,系统定义的接口,publicinterfaceActionListenerextendsEventListenerpublicabstractvoidactionPerformed(ActionEvente);该接口代表了监听并处理动作事件的功能,它包含了一个抽象方法actionPerformed所有希望能够处理动作事件(如单击按钮、在文本框中回车等)的类都必须具有ActionListener接口定义的功能,也就是要实现这个接口,,内部类(innerclass),在某个类的内部定义的类称之内部类。内部类的定义方法定义命名的内部类:可以在类中(甚至方法中)定义内部类,并在类的内部多次使用(创建多个对象)。定义匿名内部类(一次性使用):可以在new关键字后定义内部类,并立即创建一个对象内部类的类文件命名方法设外层类名为Myclass,则该类的内部类名为:Myclass$c1.class(c1为命名内部类名)Myclass$1.class(表示类中定义的第一个匿名内部类),类中的内部类,在类中如同使用其他类一样使用自己的内部类。内部类拥有对在外层类中定义的所有属性和方法的访问权。其他类如果要使用一个类的内部类时,要使用类前缀。,8-Parcel2,类中的内部类,一般类只能是public和非public,而内部类可以指定为private和protected。如果内部类为private,只有本类可以使用它。如果内部类为protected,只有外层类、与外层类处于同一包中的类、以及外层类的子类可以访问它。内部类可以实现接口及抽象类中的抽象方法。外层类可以将上述实现细节、乃至内部类都隐藏起来,给外界提供一个指向基类及接口的处理句柄。,8-Parcel3,方法中的内部类,内部类还可以定义在一个方法里,其作用域仅限于该方法的范围内(进一步隐藏),在其它方法里定义也没有名字冲突问题。实现一个接口,但只返回一个句柄在一编写好的代码中加一个类,但又不想公开化。,8-Parcel4,条件分支中的内部类,在条件分支中的内部类并不表示有条件的建

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论