3.3++Java的非访问控制符.ppt

上传人:s****8 文档编号:82766524 上传时间:2023-03-26 格式:PPT 页数:21 大小:165.50KB
返回 下载 相关 举报
3.3++Java的非访问控制符.ppt_第1页
第1页 / 共21页
3.3++Java的非访问控制符.ppt_第2页
第2页 / 共21页
点击查看更多>>
资源描述

《3.3++Java的非访问控制符.ppt》由会员分享,可在线阅读,更多相关《3.3++Java的非访问控制符.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 淮海工学院淮海工学院 计算机课程3.3 Java的非访问控制符Java的非访问控制符的非访问控制符 staticstatic 静态修饰符静态修饰符 修饰修饰属性和方法属性和方法 abstractabstract 抽象修饰符抽象修饰符 修饰修饰类和方法类和方法 finalfinal 最终修饰符最终修饰符 修饰修饰类、属性和方法类、属性和方法3.3.1 3.3.1 静态属性、静态方法与静态初始化器静态属性、静态方法与静态初始化器 staticstatic是静态修饰符。是静态修饰符。()()静态属性静态属性 被被staticstatic修饰的属性不属于任何一个类的具体对象,修饰的属性不属于任何一个

2、类的具体对象,是公共的存储单元。任何对象访问它时,取到的都是相是公共的存储单元。任何对象访问它时,取到的都是相同的数值。同的数值。静态属性静态属性是类属性是类属性。当需要引用或修改一个当需要引用或修改一个staticstatic限定的类属性时,限定的类属性时,可以使可以使用类名,也可以使用某一个对象名用类名,也可以使用某一个对象名,效果相同。,效果相同。淮海工学院淮海工学院 计算机课程()()静态方法静态方法用用staticstatic修饰符修饰的方法,是属于整个类的方法。修饰符修饰的方法,是属于整个类的方法。例如,在例如,在PhoneCard200PhoneCard200中如果需要修改附加费

3、,可以定义一个静中如果需要修改附加费,可以定义一个静态方法态方法setAdditorysetAdditory()():static void static void setAdditorysetAdditory(double (double newAddnewAdd)if(newAddif(newAdd 0)0)additoryFeeadditoryFee=newAddnewAdd;用用staticstatic修饰的方法的含义:修饰的方法的含义:1 1)调用这个方法时应该使用类名做前缀,不用某个具体的对象)调用这个方法时应该使用类名做前缀,不用某个具体的对象名;名;2 2)该方法属于整个类,它

4、在内存中的代码段随着类的定义而分)该方法属于整个类,它在内存中的代码段随着类的定义而分配和装载;配和装载;3 3)该方法不能操纵属于某个对象的成员变量,即)该方法不能操纵属于某个对象的成员变量,即staticstatic方法方法只只能处理能处理staticstatic属性属性。淮海工学院淮海工学院 计算机课程(3)静态初始化器)静态初始化器 直接用直接用static 当名字、用当名字、用 包起来的一段特殊代码包起来的一段特殊代码。与构造。与构造函数类似,完成初始化工作,但两者的区别是:函数类似,完成初始化工作,但两者的区别是:静态初始化器对每个类初始化静态初始化器对每个类初始化,构造函数对每个

5、新创建的构造函数对每个新创建的对象初始化。对象初始化。静态初始化器在所属的类加载入内存时由系统调用运行,静态初始化器在所属的类加载入内存时由系统调用运行,构造函数则在产生新对象时由系统自动执行。构造函数则在产生新对象时由系统自动执行。静态初始化器不是方法,没有方法名、返回值和参数列表静态初始化器不是方法,没有方法名、返回值和参数列表。总之,静态初始化器对整个类完成初始化操作,包括给总之,静态初始化器对整个类完成初始化操作,包括给static类成员赋初值。类成员赋初值。淮海工学院淮海工学院 计算机课程例例 TestStatic.java/测试静态属性、静态方法与静态初始化器的综合例题测试静态属性

6、、静态方法与静态初始化器的综合例题public class TestStaticpublic static void main(String args)PhoneCard200 my200_1=new PhoneCard200(100.0);PhoneCard200 my200_2=new PhoneCard200(200.5);/测试静态初始化器测试静态初始化器System.out.println(第第1张张200卡的卡号:卡的卡号:+my200_1.cardNumber);System.out.println(第第1张张200卡的金额:卡的金额:+my200_1.balance);Syst

7、em.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.pr

8、intln(第第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卡类的附加费:卡

9、类的附加费:+PhoneCard200.additoryFee);System.out.println(第第1张张200卡类的附加费:卡类的附加费:+my200_1.additoryFee);System.out.println(-调用静态方法修改静态属性:测试静态方法调用静态方法修改静态属性:测试静态方法);PhoneCard200.setAdditory(0.6);/调用静态方法修改类的静态属调用静态方法修改类的静态属性,可以实现其所有同类对象同一属性的修改性,可以实现其所有同类对象同一属性的修改System.out.println(“修改后第修改后第1张张200卡类的附加费:卡类的附加费

10、:+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.

11、out.println(第第1张张200卡的密码:卡的密码:+my200_1.password);/对其对其它同类对象的非静态属性操作无效它同类对象的非静态属性操作无效 /PhoneCard200.password=333;/用普通赋值法给类的非属性赋用普通赋值法给类的非属性赋值,编译不能通过值,编译不能通过my200_2.changePwd(666);/调用类中的方法实现密码的修改调用类中的方法实现密码的修改System.out.println(第第2张张200卡的密码:卡的密码:+my200_2.password);/对对该对象的非静态属性操作有效该对象的非静态属性操作有效System.o

12、ut.println(第第1张张200卡的密码:卡的密码:+my200_1.password);/对其对其它同类对象的非静态属性操作无效它同类对象的非静态属性操作无效 淮海工学院淮海工学院 计算机课程class PhoneCard200 /定义类:定义类:PhoneCard200 static long nextCardNumber;static String connectNumber=200;static double additoryFee;/静态属性静态属性long cardNumber;int password=111;boolean connected;double balance

13、;PhoneCard200(double bi)/构造函数构造函数 cardNumber=nextCardNumber+;balance=bi;static /静态初始化器静态初始化器 nextCardNumber=2001800001;additoryFee=0.2;淮海工学院淮海工学院 计算机课程static void setAdditory(double newAdd)/静态方法静态方法 if(newAdd0)additoryFee=newAdd;/password=6666;/静态方法不能操作非静态变静态方法不能操作非静态变量量 int changePwd(int pwd)/普通方法普

14、通方法 password=pwd;return pwd;淮海工学院淮海工学院 计算机课程3.3.2 抽象类与抽象方法抽象类与抽象方法 用用abstractabstract修饰的类或方法。修饰的类或方法。(1 1)抽象类)抽象类 没有具体实例对象的类。没有具体实例对象的类。使用抽象类的优点就是可以充分利用公共属性来使用抽象类的优点就是可以充分利用公共属性来提高开提高开发和维护程序的效率发和维护程序的效率。例:我们以例:我们以交通工具交通工具类作为例子,它代表了所有具体交通工类作为例子,它代表了所有具体交通工具的共同属性,如速度、加速、减速等。具的共同属性,如速度、加速、减速等。交通工具陆地交通工

15、具海上交通工具空中交通工具自行车汽车 淮海工学院淮海工学院 计算机课程java语句可表述为:语句可表述为:abstractabstract class class transportmeanstransportmeans float speed;float speed;/速度速度 void start()void start()/启动启动 .void stop()void stop()/停止停止 .float speedUp(float increaseSpeed)float speedUp(float increaseSpeed)/加速加速 .淮海工学院淮海工学院 计算机课程(2 2)抽象方

16、法抽象方法用用abstractabstract声明的声明的仅有方法头仅有方法头而没有具体的方法而没有具体的方法体和体和 操作实现的抽象方法。操作实现的抽象方法。方法体的具体实现由当前类的不同子类在各自的方法体的具体实现由当前类的不同子类在各自的类定义中完成。类定义中完成。只能把只能把abstractabstract方法作为一个共同的接口。方法作为一个共同的接口。所有的抽象方法必须存在于抽象类中。所有的抽象方法必须存在于抽象类中。使用使用abstractabstract方法可以隐藏具体的细节信息。方法可以隐藏具体的细节信息。淮海工学院淮海工学院 计算机课程例例 TestAbstract.java

17、public class TestAbstract /抽象类与抽象方法的使用抽象类与抽象方法的使用 public static void main(String args)PhoneCard200 my200=new PhoneCard200(50.0);/用用PhoneCard200的构造的构造函数初始化对象函数初始化对象my200PhoneCard200 my2002=new PhoneCard200(60.0);/用用PhoneCard200的构的构造函数初始化对象造函数初始化对象my2002IC_Card myIC=new IC_Card(50.0);/用用IC_Card的构造函数初始

18、化对象的构造函数初始化对象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.TimeLe

19、ft()+次电话。次电话。);淮海工学院淮海工学院 计算机课程abstract class PhoneCard /抽象类抽象类double balance;abstract void performDial();/抽象方法,不需要定义方法体抽象方法,不需要定义方法体/void performChangePwd();/出错,要么加上出错,要么加上abstract,要么定要么定义方法体义方法体double TimeLeft()/一般方法,需要定义方法体,计算可以拨打的次一般方法,需要定义方法体,计算可以拨打的次数数double current=balance;int times=0;doperfo

20、rmDial();/调用抽象方法调用抽象方法times+;while(balance=0);balance=current;return times-1;淮海工学院淮海工学院 计算机课程class PhoneCard200 extends PhoneCardstatic long nextCardNumber;static final String connectNumber=200;static double additoryFee;long cardNumber;int password;boolean connected;static /静态初始化器,初始化类静态初始化器,初始化类nex

21、tCardNumber=2001800001;additoryFee=0.1;PhoneCard200(double ib)/PhoneCard200的构造函数的构造函数cardNumber=nextCardNumber+;balance=ib;void performDial()/子类子类PhoneCard200实现的抽象方法实现的抽象方法balance-=0.5+additoryFee;/abstract void performChange();/出错,非抽象类不可以定义抽象方法出错,非抽象类不可以定义抽象方法 淮海工学院淮海工学院 计算机课程class IC_Card extends

22、PhoneCardIC_Card(double ib)/IC_Card的构造函数的构造函数balance=ib;void performDial()/子类子类IC_Card实现的抽象方法实现的抽象方法balance-=0.8;淮海工学院淮海工学院 计算机课程3.3.3 最终类、最终属性、最终方法最终类、最终属性、最终方法用用finalfinal最终修饰符来修饰类、属性和方法。最终修饰符来修饰类、属性和方法。(1)最终类)最终类不可能有子类不可能有子类(2)最终属性)最终属性(域域)可用来修饰常量,若成员变可用来修饰常量,若成员变量被声明为量被声明为finalfinal,则整个执行过程中都不会变

23、。则整个执行过程中都不会变。语法:语法:static finalstatic final double double additoryFeeadditoryFee=0.1;=0.1;注意:注意:需要说明常量的数据类型需要说明常量的数据类型需要同时指出常量的具体取值需要同时指出常量的具体取值为了节省空间,常量通常被声明为了节省空间,常量通常被声明为为staticstatic 淮海工学院淮海工学院 计算机课程(3 3)最终方法)最终方法功能和语句都不能被修改的最功能和语句都不能被修改的最终方法,即不能被当前类的子类重载。目的是终方法,即不能被当前类的子类重载。目的是为了预防不必要的重复定义。为了预

24、防不必要的重复定义。例:例:final double final double getAdditoryFeegetAdditoryFee()()return return additoryFeeadditoryFee;注意:注意:所有已被所有已被privateprivate修饰符限定为私有的方法,以及修饰符限定为私有的方法,以及所有包含在所有包含在finalfinal类中的方法,都被缺省地认为是类中的方法,都被缺省地认为是finalfinal的。的。淮海工学院淮海工学院 计算机课程例:例:TestFinal.java/最终类、最终方法、最终属性、终结器的综合例题最终类、最终方法、最终属性、终结

25、器的综合例题public class TestFinalpublic static void main(String args)PhoneCard200 my200_1=new PhoneCard200(100.0);PhoneCard200 my200_2=new PhoneCard200(200.5);System.out.println(第第1张张200卡的卡号:卡的卡号:+my200_1.cardNumber);System.out.println(第第1张张200卡的金额:卡的金额:+my200_1.balance);System.out.println(第第1张张200卡的附加费:

26、卡的附加费:+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.o

27、ut.println(修改后第修改后第2张张200卡的连接号:卡的连接号:+my200_2.connectNumber);/my200_1.additoryFee=0.4;/出错,不能给对象的最终属性赋值出错,不能给对象的最终属性赋值/PhoneCard200.setAdditory(0.6);/出错,不能修改对象的最终属性出错,不能修改对象的最终属性 IC_Card myIC=new IC_Card(50.0);System.out.println(IC 卡可以拨打卡可以拨打+myIC.TimeLeft()+次电话。次电话。);淮海工学院淮海工学院 计算机课程final class Phon

28、eCard /定义为定义为final 最终类最终类,则下面的则下面的IC卡不能定义为卡不能定义为其子类其子类,若定义为抽象类若定义为抽象类,IC卡可以为子类卡可以为子类double balance;/abstract void performDial();/final中不能定义抽象方法中不能定义抽象方法double TimeLeft()/一般方法,需要定义方法体,计算可以拨打的次数一般方法,需要定义方法体,计算可以拨打的次数double current=balance;int times=0;do/performDial();/不能调用该方法不能调用该方法times+;while(balanc

29、e=0);balance=current;return times-1;淮海工学院淮海工学院 计算机课程 class PhoneCard200 /定义类:定义类:PhoneCard200 static long nextCardNumber;static String connectNumber=200;static final double additoryFee=0.5;/静态最终属性,被赋值后就不可以再修改静态最终属性,被赋值后就不可以再修改 /这里如果不赋值这里如果不赋值,可以在静态初始化器中修改可以在静态初始化器中修改long cardNumber;int password=222;

30、boolean connected;double balance;PhoneCard200(double bi)/构造函数构造函数 cardNumber=nextCardNumber+;balance=bi;static /静态初始化器静态初始化器 nextCardNumber=2001800001;/additoryFee=0.2;/出错,如果定义时没有赋初值才可以出错,如果定义时没有赋初值才可以 淮海工学院淮海工学院 计算机课程 static void setAdditory(double newAdd)/静态方法静态方法 if(newAdd0)/additoryFee=newAdd;/不

31、能操作最终变量不能操作最终变量connectNumber=300;final double getAdditoryFee()/最终方法最终方法return additoryFee;void performDial()/PhoneCard200的方法的方法balance-=0.5+additoryFee;/*class IC_Card extends PhoneCard /PhoneCard被定义为被定义为final则不能有子类则不能有子类IC_Card(double ib)/IC_Card的构造函数的构造函数balance=ib;void performDial()/子类子类IC_Card的方法的方法balance-=0.8;*/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁