Java的非访问控制符.ppt_第1页
Java的非访问控制符.ppt_第2页
Java的非访问控制符.ppt_第3页
Java的非访问控制符.ppt_第4页
Java的非访问控制符.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

3.3Java的非访问控制符,Java的非访问控制符static静态修饰符修饰属性和方法abstract抽象修饰符修饰类和方法final最终修饰符修饰类、属性和方法3.3.1静态属性、静态方法与静态初始化器static是静态修饰符。()静态属性被static修饰的属性不属于任何一个类的具体对象,是公共的存储单元。任何对象访问它时,取到的都是相同的数值。静态属性是类属性。当需要引用或修改一个static限定的类属性时,可以使用类名,也可以使用某一个对象名,效果相同。,()静态方法,用static修饰符修饰的方法,是属于整个类的方法。例如,在PhoneCard200中如果需要修改附加费,可以定义一个静态方法setAdditory():staticvoidsetAdditory(doublenewAdd)if(newAdd0)additoryFee=newAdd;用static修饰的方法的含义:1)调用这个方法时应该使用类名做前缀,不用某个具体的对象名;2)该方法属于整个类,它在内存中的代码段随着类的定义而分配和装载;3)该方法不能操纵属于某个对象的成员变量,即static方法只能处理static属性。,(3)静态初始化器,直接用static当名字、用包起来的一段特殊代码。与构造函数类似,完成初始化工作,但两者的区别是:静态初始化器对每个类初始化,构造函数对每个新创建的对象初始化。静态初始化器在所属的类加载入内存时由系统调用运行,构造函数则在产生新对象时由系统自动执行。静态初始化器不是方法,没有方法名、返回值和参数列表。总之,静态初始化器对整个类完成初始化操作,包括给static类成员赋初值。,例TestStatic.java,/测试静态属性、静态方法与静态初始化器的综合例题publicclassTestStaticpublicstaticvoidmain(Stringargs)PhoneCard200my200_1=newPhoneCard200(100.0);PhoneCard200my200_2=newPhoneCard200(200.5);/测试静态初始化器System.out.println(第1张200卡的卡号:+my200_1.cardNumber);System.out.println(第1张200卡的金额:+my200_1.balance);System.out.println(第1张200卡的附加费:+my200_1.additoryFee);System.out.println(第1张200卡的密码:+my200_1.password);System.out.println(第2张200卡的卡号:+my200_2.cardNumber);System.out.println(第2张200卡的金额:+my200_2.balance);System.out.println(第2张200卡的附加费:+my200_2.additoryFee);System.out.println(第2张200卡的密码:+my200_2.password);,System.out.println(-直接操作修改静态属性:测试静态属性);my200_1.additoryFee=0.4;/直接操作修改对象的静态属性,可以实现对类和其它同类对象同一属性的修改System.out.println(第2张200卡的附加费:+my200_2.additoryFee);System.out.println(200卡类的附加费:+PhoneCard200.additoryFee);System.out.println(第1张200卡类的附加费:+my200_1.additoryFee);System.out.println(-调用静态方法修改静态属性:测试静态方法);PhoneCard200.setAdditory(0.6);/调用静态方法修改类的静态属性,可以实现其所有同类对象同一属性的修改System.out.println(“修改后第1张200卡类的附加费:+my200_1.additoryFee);System.out.println(修改后第2张200卡的附加费:+my200_2.additoryFee);,System.out.println(-测试修改密码的各种方法);my200_2.password=222;/用普通赋值法给对象的非静态属性赋值System.out.println(第2张200卡的密码:+my200_2.password);/对该对象的非静态属性操作有效System.out.println(第1张200卡的密码:+my200_1.password);/对其它同类对象的非静态属性操作无效/PhoneCard200.password=333;/用普通赋值法给类的非属性赋值,编译不能通过my200_2.changePwd(666);/调用类中的方法实现密码的修改System.out.println(第2张200卡的密码:+my200_2.password);/对该对象的非静态属性操作有效System.out.println(第1张200卡的密码:+my200_1.password);/对其它同类对象的非静态属性操作无效,classPhoneCard200/定义类:PhoneCard200staticlongnextCardNumber;staticStringconnectNumber=200;staticdoubleadditoryFee;/静态属性longcardNumber;intpassword=111;booleanconnected;doublebalance;PhoneCard200(doublebi)/构造函数cardNumber=nextCardNumber+;balance=bi;static/静态初始化器nextCardNumber=2001800001;additoryFee=0.2;,staticvoidsetAdditory(doublenewAdd)/静态方法if(newAdd0)additoryFee=newAdd;/password=6666;/静态方法不能操作非静态变量intchangePwd(intpwd)/普通方法password=pwd;returnpwd;,3.3.2抽象类与抽象方法,用abstract修饰的类或方法。(1)抽象类没有具体实例对象的类。使用抽象类的优点就是可以充分利用公共属性来提高开发和维护程序的效率。例:我们以交通工具类作为例子,它代表了所有具体交通工具的共同属性,如速度、加速、减速等。,java语句可表述为:abstractclasstransportmeansfloatspeed;/速度voidstart()/启动.voidstop()/停止.floatspeedUp(floatincreaseSpeed)/加速.,(2)抽象方法,用abstract声明的仅有方法头而没有具体的方法体和操作实现的抽象方法。方法体的具体实现由当前类的不同子类在各自的类定义中完成。只能把abstract方法作为一个共同的接口。所有的抽象方法必须存在于抽象类中。使用abstract方法可以隐藏具体的细节信息。,例TestAbstract.java,publicclassTestAbstract/抽象类与抽象方法的使用publicstaticvoidmain(Stringargs)PhoneCard200my200=newPhoneCard200(50.0);/用PhoneCard200的构造函数初始化对象my200PhoneCard200my2002=newPhoneCard200(60.0);/用PhoneCard200的构造函数初始化对象my2002IC_CardmyIC=newIC_Card(50.0);/用IC_Card的构造函数初始化对象myICSystem.out.println(200卡可以拨打+my200.TimeLeft()+次电话。);System.out.println(IC卡可以拨打+myIC.TimeLeft()+次电话。);System.out.println(第1张200卡的卡号:+my200.cardNumber);System.out.println(第2张200卡的卡号:+my2002.cardNumber);System.out.println(第2张200卡可以拨打+my2002.TimeLeft()+次电话。);,abstractclassPhoneCard/抽象类doublebalance;abstractvoidperformDial();/抽象方法,不需要定义方法体/voidperformChangePwd();/出错,要么加上abstract,要么定义方法体doubleTimeLeft()/一般方法,需要定义方法体,计算可以拨打的次数doublecurrent=balance;inttimes=0;doperformDial();/调用抽象方法times+;while(balance=0);balance=current;returntimes-1;,classPhoneCard200extendsPhoneCardstaticlongnextCardNumber;staticfinalStringconnectNumber=200;staticdoubleadditoryFee;longcardNumber;intpassword;booleanconnected;static/静态初始化器,初始化类nextCardNumber=2001800001;additoryFee=0.1;PhoneCard200(doubleib)/PhoneCard200的构造函数cardNumber=nextCardNumber+;balance=ib;voidperformDial()/子类PhoneCard200实现的抽象方法balance-=0.5+additoryFee;/abstractvoidperformChange();/出错,非抽象类不可以定义抽象方法,classIC_CardextendsPhoneCardIC_Card(doubleib)/IC_Card的构造函数balance=ib;voidperformDial()/子类IC_Card实现的抽象方法balance-=0.8;,3.3.3最终类、最终属性、最终方法,用final最终修饰符来修饰类、属性和方法。(1)最终类不可能有子类(2)最终属性(域)可用来修饰常量,若成员变量被声明为final,则整个执行过程中都不会变。语法:staticfinaldoubleadditoryFee=0.1;注意:需要说明常量的数据类型需要同时指出常量的具体取值为了节省空间,常量通常被声明为static,(3)最终方法功能和语句都不能被修改的最终方法,即不能被当前类的子类重载。目的是为了预防不必要的重复定义。例:finaldoublegetAdditoryFee()returnadditoryFee;注意:所有已被private修饰符限定为私有的方法,以及所有包含在final类中的方法,都被缺省地认为是final的。,例:TestFinal.java,/最终类、最终方法、最终属性、终结器的综合例题publicclassTestFinalpublicstaticvoidmain(Stringargs)PhoneCard200my200_1=newPhoneCard200(100.0);PhoneCard200my200_2=newPhoneCard200(200.5);System.out.println(第1张200卡的卡号:+my200_1.cardNumber);System.out.println(第1张200卡的金额:+my200_1.balance);System.out.println(第1张200卡的附加费:+my200_1.additoryFee);System.out.println(第1张200卡的密码:+my200_1.getAdditoryFee();System.out.println(第2张200卡的卡号:+my200_2.cardNumber);System.out.println(第2张200卡的金额:+my200_2.balance);System.out.println(第2张200卡的连接号:+my200_2.connectNumber);my200_1.setAdditory(0.9);System.out.println(修改后第2张200卡的连接号:+my200_2.connectNumber);/my200_1.additoryFee=0.4;/出错,不能给对象的最终属性赋值/PhoneCard200.setAdditory(0.6);/出错,不能修改对象的最终属性IC_CardmyIC=newIC_Card(50.0);System.out.println(IC卡可以拨打+myIC.TimeLeft()+次电话。);,finalclassPhoneCard/定义为final最终类,则下面的IC卡不能定义为其子类,若定义为抽象类,IC卡可以为子类doublebalance;/abstractvoidperformDial();/final中不能定义抽象方法doubleTimeLeft()/一般方法,需要定义方法体,计算可以拨打的次数doublecurrent=balance;inttimes=0;do/performDial();/不能调用该方法times+;while(balance=0);balance=current;returntimes-1;,classPhoneCard200/定义类:PhoneCard200staticlongnextCardNumber;stat

温馨提示

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

评论

0/150

提交评论