Java主要修饰符的使用方法总结(周双)_第1页
Java主要修饰符的使用方法总结(周双)_第2页
Java主要修饰符的使用方法总结(周双)_第3页
Java主要修饰符的使用方法总结(周双)_第4页
Java主要修饰符的使用方法总结(周双)_第5页
已阅读5页,还剩17页未读, 继续免费阅读

下载本文档

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

文档简介

1、java中主要修饰符的使用(周双)武汉理工大学计算机学院软件sylool班周双(0121010680234)java 中走义了 6 个常用修饰符:public、protectedx private、abstract、static、 final访问控制符:公开级别:public ;受保护级别:protected ;默认级别:friendly (一般不指明);私有级别:privateo类只能使用public和默认级别修饰。其中 类的属性和方法可以使用上述4个访问修符;局部变量不可以使用访问修饰符; 常用的方法是将类的属性设为private ,而将类的方法设为public。abstract修饰符:a

2、bstract修饰符可以用来修饰类和成员方法:用abstract修饰抽象类,表示该类不可以被实例化。相对应的则称为具体类。用abstract修饰 的方法成为抽象方法,该方法没有方法体。抽象方法用来描述系统具有什么功 能。final修饰符:final修饰符表示不可以改变的含义。final修饰符可以用来修 饰类,成员方法,和成员变量。用final修饰类z表示该类不可以被继承;用final 修饰成员方法,表示该方法不可以被覆盖(override );用行nal修饰变量,表示 一旦赋值就不可以被改变。注意,final变量必须被显式初始化。对于实例变量可 以在定义时或在构造方法中进行初始化。而类变量(s

3、tatic变量)必须在定义时进行 初始化。对于final修饰的引用类型,那么该变量在其生命周期中只能指向同_ 个对象,但可以改变对象的值。static修饰符:static成员变量表示静态变量,可以直接通过类名来访问。static成员方法表示静态方法,可以直接通过类名来访问。由于static方法中,只可以 访问静态变量和方法,所以要想访问一个实例变量或方法,则必须要先得到相应 的对象的引用,才能访问其变量和方法。一、类的修饰符java程序在定义类时,除恶额使用class关键字标识外,还可以在在class之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制 符和非访问控制符两大

4、类,下面主要讨论类的费访问控制符。1抽象类凡是用abstract修饰符修饰的类被称为抽象类。抽象类就是没有具体对象的概念类。比如电话卡有很多类型,磁卡、ic卡、ip卡、200卡、300卡、校园201卡。不同种类的卡有各自的特点,例如磁卡和ic卡没有卡号和密码;使用 200卡每次通话要多扣除0.1元的附加费等。同时它们也拥有一些共同的特点, 如每张卡都有剩余的金额,都有通话的功能。为此,可以定义一种集合了所有种 类的电话卡的公共特点的抽象电话卡如下:abstract class phonecarddouble balance;void performdial()抽象类是它的所有子类的公共属性的集

5、合,所以使用抽象类的一大优点就是可以充分利用这些公共属性来提高开发和维护程序的效率。1.2最终类如果一个类被final修饰符所修饰和限定,说明这个类不能再有子类。被定 义为final的类通常是一些有固定作用、用来完成某种标准功能的类。将一类 定义为final则可以将它的内容、属性和功能固定下来,与它的类名形成稳定的 映射关系,从而引用这个类时所实现的功能的正确无误。注意:abstract和final修饰符不能同时修饰一个类,因为abstract类自身没 有具体对象,需要派生出子类后再创建子类的对象;而final类不可能有子类, 这样abstract final类就无法使用,也就没有意义了。但是

6、abstract和final可以各自与其他大的修饰符合用。例如一个类可以是 public abstract 的也可以是 public final 的。二、域本文只介绍静态域和最终域的特点与使用方法。2.1静态域用static修饰符修饰的域是仅属于类的静态域。静态域最主要的特点是:它们是类的域不属于但可一个类的具体对象。它不保存在某个对象的内存区间 中,而是保存在类的内存区域的公共存储单元。换句话说,对于该类的任何一个 具体对象而言,静态域是一个公共的存储单元,任何一个类的对象访问它时,取 到的都是相同的数值;同样但可一个类的对象去修改它时,也都是在对同一个内 存单元进行操作。下面的程序片段中定

7、义了两个静态域。class phonecard200static string connectnumber = "200"static double additoryfee;long cardnumber;int password;boolean connected;double balance;上面程序定义了对应200电话卡的类phonecard200.由于所有的200电话卡的接入号码都是"200",所以定义类的静态域connectnumber标志所有phonecard200对象共有的接入号码;同时使用200电话卡通话的附加费对每张电话卡也是一致的,所

8、以走义类的静态域additoryfee.tlil的程序将验证静态域是类中每个对象共享的域。例 1 teststaticfield.javapublic class teststaticfieldpublic static void main(string argsfl)phonecard200 my200_l=new phonecard200();phonecard200 my200_2=new phonecard200();my200_l .additoryfee=0.1;system.out.println("第二张 200 卡的附加费:"+my200_2.addito

9、ryfee);system.out.println(n200 卡类的附加费:"+phonecard200.additoryfee);class phonecard200static string connectnumber = "200”;static double additoryfee;long cardnumber;int password;boolean connected;double balance;运行结果如下图:f:javapxog>java teststaticfield 第二张200卡的附加费:0.1 200卡类的附加费:01有结果可知,类的静态域

10、可以成为该类各个对象共享的变量,便于实现一 个类不同对象之间的通信。2.2最终域final是用来修饰常量的修饰符,一个类的域如果被声明为final,sp么它的值 在程序的整个执行过程中都不能改变。例如phonecard200类中的接入号码,对于200电话卡是固定的字符串"200 ,根据问题的实际情况,这个数据不需要也不应该被改变”所以可以把它 走义为最终域。static final string connectnumber = "200"用final修饰符说明常量时,需要注意以下几点:(1)需要说明常量的数据类型。(2)需要同时指出常量的具体取值。(3 )因为所有

11、类对象的常量成员,其取值都固定一致,为了节省空间, 常量通常声明为static.最终域的使用在系统类中也很常见。例如在java.lang包中,有一个integer类,它的两个域定义如下:public static final int max_valuepublic static final int min_value从上述走义可以看出:它们都是最终域(常量),而且也都是静态域。 max_value域和min_value域分别存储in(类型数据的最大值:2147483647 ) 和最小值(-2147483648 integer正是利用这两个域为我们提供了 int类型的数 据的范围。除静态域和最终

12、域之外,域还有其他类型,例如易失域。如果一个域被 volatile修饰符所修饰,说明这个域可能同时被几个线程所控制盒修改,即这个 域不仅仅被当前程序所掌握,在运行过程中可能存在其他未知的程序操作来影响 和改变该域的取值。在使用当中应该特别留意这些影响因素。通常,volatile用 来修饰接受外部输入的域。如表示当前时间的变量将由系统的后台线程随时修 改,以保证程序中取到的总是最新的当前的系统时间,所以可以把它定义为易失 域。三、方法方法的修饰符也分为访问控制符和非访问控制符两大类,常用的非访问控制符把方法分成若干种,下1!1介绍几种用于特走场合的方法。3抽象方法修饰符abstract修饰的抽象

13、方法是一种仅有方法头,而没有具体方法体和操作实现的方法。例如,下面的拨打电话的方法perfonndial()就是抽象类phonecard 中定义的一个抽象方法。abstract void performdial();可见,abstract方法只有方法头的声明,后面没有大括号包含的方法体。那么为什么不定义方法体呢?因为电话卡类是从所有电话卡中抽象出来的公共特 性的集合,每种电话卡都有拨打电话的功能,但是每种电话卡的拔打电话 的功能的具体实现(具体操作)都不相同。例如ic卡电话机就可以通话;而200 卡则需要在双音频电话中先输入正确的卡号和密码。所以phonecard的不同子类 的performd

14、iak)方法虽然有相同目的,但其方法体是各不相同的。针对这种情况为phonecard类定义一个方法体的抽象方法performdial(),s于方法体的具体实现,则留到当前类的不同子类在它们各自的类定义中完成。也 就是说,各子类在继承了父类的抽象方法之后,再分别用不用的语句和方法体来 重新定义它,形成若干个名字相同,返回值相同,参数列表也相同,目的一致但 是具体实现有一定的差别的方法。使用抽象方法的目的是使所有的phonecard类 所有子类对外都呈现一个相同名字的方法,是一个统一的接口。当然,定义abstract方法也有特别的优点,及时可以隐藏具体的细节信息,是调用的程序不必过分关注类内部的具

15、体情况。由于所有的子类使用的都是相同 的方法头,而方法头实际包含了调用该方法的全部信息,所以一个希望完成拨 打电话操作的语句,可以不必知道它调用的是哪个电话卡子类的performdiak) 方法/而仅仅使用phonecard类的peh'onndial()方法就足够了。需要特别注意的是,所有的抽象方法,都必须存在于抽象类之中。一个非抽象类中岀现抽象方法是非法的。也就是说,一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体。不过抽象类不一定只能拥有抽象 方法,它可以包含非抽象方法。卜面的例子将体现上面的内容。例 2: test abstract .j a vapubl

16、ic class testabstractpublic static void main(string args)phonecard200 my200=new phonecard200(50.0);ic.card myic=new ic_card(50.0);system.out.println(n200 卡可以拨打"+my200timeleft()+次电话。");system.out.println("ic 卡可以拨打"+myic.timeleft()+'次电话。"); abstract class phonecarddouble b

17、alance;abstract void performdial();double timeleft()double current = balance;int times = 0;doperformdial();times+; while(balance>=0);balance = current;return times-1;class phonecard200 extends phonecardstatic long nextcardnumber;static final string connectnumber = "200"static double add

18、itoryfee;long cardnumber;int password;boolean connected;staticnextcardnumber = 2001800001;additoryfee = 0.1;phonecard200(double ib)cardnumber=nextcardnumber+; balance=ib;void performdial()balance 二0.5+additoryfee;class ic_card extends phonecard ic_card(double ib)balance=ib;void performdial()balance-

19、=0-9;运行结果如下:if:javaprog>java testabstract 200卡可以拨打貂0次电话。ic卡可以拨打55.0次电话。例2共定义了 4个类,除了主类之外还有抽象类phonecard和它的两个子类 phonecard200 和 ic_cardo3.2静态方法用static修饰符修饰的方法,是属于整个类的类方法;而不用static修饰符限定的方法,是属于某个具体类对象或实例的方法(可称之为对象方法x声明一个方法为static至少有三重含义:(1)调用这个方法,应该使用类名做前缀,而不是某一个具体的对象名。(2)非static的方法是属于某个对象的方法”在这个对象创建时

20、对象的方法在内存中拥有自己专用的代码段;而static的方法是属于整个类的,它在内存中的代码段将随着类的定义而分配和装载,不被俗可一个对象专有。(3)由于static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员的变量,而只能处理属于整个类的成员变量,也即 z static 方法只能处理static域。例如,在phonecard200中如果需要修改附加费,可以定义一个静态方法: setadditory();static void setadditory (double newadd)if(newadd>0)以往的例子中多次使用的main方法就是静态方法,这是为了系统在没有任何

21、实例化对象之前就可以运行一个应用程序。在类定义中,凡涉及针对一个具体对象的方法必须是非静态的,调用方法时 要采用对象名方法名;而不涉及到具体对象的方法必须是静态的,调用方法 时应采用类名方法名“。下面通过例3说明静态方法、静态域以及对象方法的使用。例 3 : teststatic.javapublic class teststaticpublic static void main(string args)integer i = new integer(25);system.out.printin(value ()*2);/瀚出:50system.out.println(lfloatv

22、alue();输出:25.0system.out.println("i="+i.tostring); 输出:i=25system.out.println(lnteger.parselnt(n100")*2); 输岀:200system.out.println( "100*2=" +integer.tostring( 1 oo*2);/$0ij岀:100*2=200system.out.println(integer.valueof(n 100").intvalue()*2);/$俞出:200system.out.println(int

23、eger.max_value); 输出:2147483647system.out.println(integer.min_value);/j岀:-21474836483.3其他方法3.3.1最终方法在类走义中,凡是final修饰符所修饰的方法,是功能和内部语句不能被更 改的最终方法,即是不能被当前类的子类重新定义的方法。如果类的某个方法被 final修饰符所限定,则该类的子类就不能再重新走义与此方法同名的自己的方 法,而仅能使用从父类继承来的方法。这样,就固定了这个方法所对应的具体操 作,可以防止子类对父类关键方法的错误的重走义,保证了程序的安全性和正确 性。需要注意的是:所有已被privat

24、e修饰符限定为私有的方法,以及所有包含 在final类中的方法,都被默认地认为是最终方法。因为这些方法要么不可能被子类所继承,要么根本没有子类,所有都不可能被重载,自然都是最终方法。3.3.2本地方j去native修饰符一般用来声明其他语言书写方法体并具体实现方法功能的特殊 方法,这里的其他语言包括c、c+、fortran和汇编等。由于native的方法 的方法体使用其他语言在程序外部写成,所以所有的native方法都没有方法体, 而用一个分号代替。四、访问控制符访问控制符是一组限定类、属性或方法是否可以被程序中的其他部分访问和 调用的修饰符,这里的其他部分是指程序里这个类之外的其他类。无论修

25、饰符如 何定义,一个类总能够访问和调用它自己的域或方法,但是这个类之外的其他部 分能否访问这个域或方法,就要看该域和方法以及它所属的类的访问控制符如何 定义了。java中类的访问控制符只有一个:public ,即公共的。一个类被声明为公共 类,表明它可以被所有的其他类访问和引用,这里的访问和引用是指这个类作为 整体是课件和可用的,程序的其他部分可以创建这个类的对象、访问这个类内部 可见的成员变量和调用它的可见的方法。假如一个类没有访问控制符public说明尼就具有默认地访问控制特性。这 种默认的访问控制权规定该类只能被同一个包中的类访问和引用,而不可以被其 他包中的类使用,这种访问特性又称为访

26、问性。java的类是通过包的概念来组织的,包是类的一种松散的集合。处于同_ 个包中的类可以不需要任何说明(默认情况)而方便地互相访问和引用,因为把 常在一起协同工作的类放在一个包里也是很自然的。而对于在不同包中的类,一 般说来,它们相互之间是不可见的,当然也不可能互相引用。但是,当一个类被 声明为public时,它就具有了被其他包中的类访问的可能性,只要这些其他包中 的类在程序中使用import语句引入这种public类,就可以访问和引用。下表说明了类的访问控制符如何对类的访问进行限走。表1类的访问控制符与类的访问控制默认(无访问控制符)公共菊有public修饰符)同一包中的类可以访问可以访问

27、不同包中的类不可访冋可以访问合理地用类的访问控制符可以使整个程序结构清晰、严谨,减少可能产生 的类间干扰和¥筍吴。类成员就是指类的域和方法。一个类作为整体对程序的其他部分可见,并不 能代表类内的所有域和方法也同时对程序的其他部分可见,前者只是后者的必要 条件,类的域和方法能否为所有其他类所访问,还要看这些域和方法自己的访问控制符是如何定义的。表2类成员的访问控制符及其作用公共类(public)默认类类成员访问控制符public protect蚩忙privatei默认edpublicprotected默认 private可以访 问类成 员的区 域ab+cbdbbbd访问控制符通常的定义

28、方式是:(1) 类和类成员都采用默认访问控制(包内访问1(2) 类比成员的访问范围宽。成员在类的范围内,根据各自的用途设置 不同的访问控制。如果一个类定义了常用的操作,希望能作为公共工具供其他的类和程序使 用,则应该把类本身和这些方法都定义成public ,最典型的例子莫过于java类库 中那些公共类和它们的公共方法了。另外,每个java程序的主类都必须是public 类,也是基于相同的原因。由于用public修饰的域对外完全公开,可能会造成安全性和数据封装性下降,所以一般应减少public域的使用。为了使对象具有良好的封装性,一般将类的实例域设计成私有。为了使其他类或对象能够访问私有域,本类

29、必须访问私有域的方法(公共方法x而且按照惯例,读私有域的方法取名为get.写私有域的方法取名为set。f面通过一个例子说明:彳列 4:accesscontrol.javaimport java.applet. applet;import java.awt.*;public class accesscontrol extends appletclassbeaccessed c=new classbeaccessed();subclass sc=new subclass();packageclass ic=new packageclass();public void paint(graphics

30、g)g.drawstring( "self accessible:", 10,20); g.drawstring(c.tostring(),20,35); g.drawstring(hsub accessible: h,10,55);g.drawstring(sc.accessdirectly(),20,70);g.drawstring(hpackage accessible:h 510,90);g.drawstring(ic.accessdirectly(),20,105);g.drawstring(naccess using public method:n,l0,125

31、);g.drawstring(sc.accesscls(),20j 40);g.drawstring(ic.accesscls(),20,l 55);class classbeaccessedpublic string m_publicproperty;string m_friendlyproperty;protected string m_protectedproperty;private string m_privateproperty;classbeaccessed()m_publicproperty=new string(npublich); m_friendlyproperty=new string(nfrendlyn); m_protectedproperty=new string(nprotectedn); m_privateproperty=new string(nprivaten);public string tostringoreturn(m_publicproperty+n; ”+ m_friendlyproperty+n;n+ m_protectedproperty+h; ”+ m_pri vatepropert y+m;n);class s

温馨提示

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

评论

0/150

提交评论