Java语言程序设计复习要点

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

3.1Java语言的面向对象特性3.2.1类类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。Java语言是建立在类这个逻辑结构之上,所以Java是一种完全面向对象的程序设计语言。类是Java的核心,Java程序都由类组成,一个程序至少要包含一个类,也可以包含多个类。对象是类的实例,Java程序中可以使用标识符表示对象,并通过对象引用类中的变量和方法。类封装了一类对象的状态和方法,是这一类对象的原形。一个类的实现包括两个部分:类声明和类体。1.类的声明类通过关键字class来创建,下面的声明语句格式给出了可能出现的符号和顺序:[public][abstract][final]class类名[extends父类][implements接口]{类体(成员变量和成员方法)}其中,[]表示为可选项,表示为必选项。关键字含义说明如下:①class类名class关键字告诉编译器这是一个类,类名是可以自由选取但必须是合法的标识符。在声明类的语句中,class前面的关键字称为类的修饰符。②public(公共的)在没有任何修饰符的缺省情况下,类只能被同一个源程序文件或同一个包中的其它类使用,如例4.3中的MyBox只能被ClassDemo2使用。加上public修饰符后,类可以被任何包中的类使用,称为公共类。有关包的概念请参考后面章节的内容(目前可把包当作一个源程序文件)。③abstract(抽象的)有时,定义的类代表了一个抽象的概念,就不能用它来实例化一个对象。同样在OOP中,可能建立了一个不需要产生对象的类。例如,java.lang包中的Number类代表了数这个抽象概念,可以用它在程序中产生一个数的子类,如Interger或Float,但从Number中直接生成对象是没有意义的。abstract说明的类称为抽象类,不能用它实例化一个对象,它只能被继承。④final(最终的)final说明的类称为最终类。一个最终类不可能有子类,也就是说它不能被继承。在设计类时,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。final类不能被继承,因此,final类的成员方法没有机会被覆盖,默认都是final的。final类不能被继承,没有子类,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final不能用于修饰构造方法。为什么要把一个类说明为最终类呢?有两点理由:为了提高系统的安全性和出于对一个完美类的偏爱。黑客常用的一个攻击技术是设计一个子类,然后用它替换原来的父类。子类和父类很相象,但做的事情却大不一样。为防止这样的事情发生,你可以把你的类声明为最终类,不让黑客有机可乘。⑤extends(继承)父类名extends告诉编译器创建的类是从父类继承下来的子类,父类必须是Java系统类或已经定义的类。从父类继承,可以提高代码的重用性,不必从头开始设计程序。大部分情况下应该利用继承的手段编程,只在没有合适的类可以继承时才自己设计类。⑥implements(实现)接口名implements告诉编译器类实现的接口,接口必须有定义,一般为系统类。接口是消息传递的通道,通过接口,消息才能传递到处理方法中进行处理。implements说明你的类可以实现的一个或多个接口,如果有多个接口,要用逗号分隔。关于接口的设计和使用请参考第6章的内容。说明:Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非访问控制符两大类。修饰符之间的先后排列次序对类的性质没有任何影响。下表展示了非访问控制符对类、变量和方法的修饰作用。Java中非访问控制修饰符修饰符类变量方法abstract抽象类抽象方法final最终类最终变量最终方法static静态变量静态方法volatile易失变量native本地方法synchronized同步方法访问控制符是组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。类的访问控制符只有一个public,变量和方法的访问控制符有3个,分别是public、private和protected。另外还有一种没有定义专门的访问控制符的默认情况。Java中的访问控制修饰符修饰符类变量方法public√√√protected√√默认无修饰符√√√private√√Java中的访问控制符的控制范围控制范围publicprotected默认无修饰符private同一类中可见√√√√同一包中对子类可见√√同一包中对非子类可见√√√不同包中对子类可见√√不同包中对非子类可见√2.类体类体主要用来描述类所具有的状态和具备的行为(功能)。其中,成员变量(有时也称为属性、数据、域)描述了类和对象的状态,成员方法则描述了类所具备的功能。对成员变量的操作实际上就是改变类和对象的状态,使之能满足程序的需要。对象的行为由类的方法实现,其它对象可以调用一个对象的方法,通过消息的传递实现对该对象行为的控制。与类相似,成员变量/成员方法也有很多修饰符,用来控制对成员变量的访问,实现对类和对象的封装。类体定义如下:classclassName{//成员变量[public|protected|private][static][final][transient][volatile]typevariableName;//成员方法[public|protected|private][static][final|abstract][native][synchronized]returnTypemethodName([paramList])[throwsexceptionList]{Statements}}3.成员变量成员变量声明的格式和顺序如下:[public|protected|private][static][final][transient][volatile]typevariableName;其中,static:静态变量(类变量);相对于实例变量final:常量transient:暂时性变量,用于对象存档volatile:共享变量,用于并发线程的共享不同含义的修饰符:①访问控制权限public公共变量由public修饰的变量称为公共变量,,可被任何包中的任何类访问,只有在确认任何外部访问都不会带来不良后果的情况下才将成员声明为公共的。公共变量对任何类都是可见的,因此它没有秘密可言,不具有数据保护功能。private私有变量由private修饰的变量称为私有变量,只能被声明它的类所使用,拒绝任何外部类的访问。私有变量是不公开的,它们得到了最好的保护,这是对类进行封装时使用的主要方法。protected受保护变量由protected修饰的变量称为受保护变量,可被声明它的类和派生的子类以及同一个包中的类访问。package包变量由package修饰的变量称为包变量,在声明时常常省略package关键字,即没有修饰符的成员被视为包成员。包成员可被声明它的类和同一个包中的其它类(包括派生子类)所访问,在其它包中的子类则不能访问父类的包成员。表3-1列出了这些限定词的作用范围。【表3-1】java中类的限定词的作用范围比较同一个类同一个包不同包的子类不同包非子类private*default**protected***public****②static静态变量static声明的成员变量被视为类的成员变量,而不把它当作实例对象的成员变量。换句话说,静态变量是类固有的,可以直接引用,其它成员变量仅仅被声明,生成实例对象后才存在,才可以被引用。基于这样的事实,也把静态变量称为类变量,非静态变量称为实例变量。相应地,静态方法称为类方法,非静态方法称为实例方法。【例3.1】静态变量的使用。classStaticDemo{staticintx;inty;staticpublicintgetX(){returnx;}staticpublicvoidsetX(intnewX){x=newX;}publicintgetY(){returny;}publicvoidsetY(intnewY){y=newY;}}publicclassShowDemo{publicstaticvoidmain(String[]args){System.out.println(静态变量x=+StaticDemo.getX());//System.out.println(实例变量y=+StaticDemo.getY());//非法,编译时将出错StaticDemoa=newStaticDemo();StaticDemob=newStaticDemo();a.setX(1);//ThestaticmethodsetX(int)fromthetypeStaticDemoshouldbeaccessedinastaticwaya.setY(2);b.setX(3);b.setY(4);System.out.println(静态变量a.x=+a.getX());System.out.println(实例变量a.y=+a.getY());System.out.println(静态变量b.x=+b.getX());System.out.println(实例变量b.y=+b.getY());}}将源程序中的出错语句删除或使用解释符//隐藏起来如://System.out.println(“实例变量y=”+StaticDemo.getY());//非法,编译时将出错,再进行编译,即可执行该程序,从输出结果中可以得出以下几点结论:☆类的静态变量可以直接引用,例如在程序中直接使用了StaticDemo.getX(),而非静态变量则不行。类的静态变量相当于某些程序语言的全局变量。☆静态方法只能使用静态变量,不能使用实例变量。☆类的静态变量只有一个版本,所有实例对象引用的都是同一个版本。☆对象实例化后,每个实例变量都被制作了一个副本,它们之间互不影响。☆静态变量可以在静态块中被初始化。③final最终变量一旦成员变量被声明为final,在程序运行中将不能被改变。这样的成员变量就是一个常量。例如:finaldoublePI=3.14159;该语句声明一个常量PI,如果在后面试图重新对它赋值,将产生编译错误。另外,常量名一般用大写字母。常量和直接量一样不占用内存空间。(1)final成员只能被初始化一次;(2)final成员必须在声明时或者在构造方法中被初始化,而不能在其他的地方被初始化。(3)对于finalstatic类型成员变量,static使得变量只存在一个副本,final使得它不能被改变。④transient过渡变量Java语言目前对transient修饰符没有明确说明,它一般用在对象序列化(objectserialization)上,说明成员变量不允许被序列化。⑤volatile易失变量volatile声明的成员变量为易失变量,用来防止编译器对该成员进行某种优化。这是Java语言的高级特性,仅被少数程序员使用。4.成员方法类的设计集中体现在成员方法的设计上。良好的设计可以使类更加强壮,功能更加完善。成员方法的设计应该从类的整体行为出发,能正确响应外部消息,自然地改变对象的状态,并符合相对独立性、结构清晰、可重用性强等编程要求。成员方法相当于其它语言的函数或过程,是命令语句的集合。成员方法的实现包括两部分内容:方法声明和方法体。方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。成员方法的声明一般放在成员变量的声明之后,声明语句的格式和顺序如下:[public|protected|private][static][final|abstract][native][synchronized]returnTypemethodName(

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功