Java语言程序设计复习要点资料下载.pdf
《Java语言程序设计复习要点资料下载.pdf》由会员分享,可在线阅读,更多相关《Java语言程序设计复习要点资料下载.pdf(14页珍藏版)》请在冰豆网上搜索。
在声明类的语句中,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之前增加若干修饰符来修饰限定所定义的类的特性。
类的修饰符分为访问控制符和非访问控制符两大类。
修饰符之间的先后排列次序对类的性质没有任何影响。
下表展示了非访问控制符对类、变量和方法的修饰作用。
JavaJava中非访问控制修饰符中非访问控制修饰符修饰符修饰符类类变量变量方法方法abstract抽象类抽象方法final最终类最终变量最终方法static静态变量静态方法volatile易失变量native本地方法synchronized同步方法访问控制符是组限定类、域或方法是否可以被程序里的其他部分访问和调用的修饰符。
类的访问控制符只有一个public,变量和方法的访问控制符有3个,分别是public、private和protected。
另外还有一种没有定义专门的访问控制符的默认情况。
JavaJava中的访问控制修饰符中的访问控制修饰符修饰符修饰符类类变量变量方法方法publicprotected默认无修饰符privateJavaJava中的访问控制符的控制范围中的访问控制符的控制范围控制范围控制范围publicprotected默认无修饰符private同一类中可见同一包中对子类可见同一包中对非子类可见不同包中对子类可见不同包中对非子类可见22类体类体类体主要用来描述类所具有的状态和具备的行为(功能)。
其中,成员变量(有时也称为属性、数据、域)描述了类和对象的状态,成员方法则描述了类所具备的功能。
对成员变量的操作实际上就是改变类和对象的状态,使之能满足程序的需要。
对象的行为由类的方法实现,其它对象可以调用一个对象的方法,通过消息的传递实现对该对象行为的控制。
与类相似,成员变量/成员方法也有很多修饰符,用来控制对成员变量的访问,实现对类和对象的封装。
类体定义如下:
classclassName/成员变量成员变量public|protected|privatestaticfinaltransientvolatiletypevariableName;
/成员方法成员方法public|protected|privatestaticfinal|abstractnativesynchronizedreturnTypemethodName(paramList)throwsexceptionListStatements33成员变量成员变量成员变量声明的格式和顺序如下:
public|protected|privatestaticfinaltransientvolatiletypevariableName;
其中,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】静态变量的使用。
静态变量的使用。
classStaticDemostaticintx;
inty;
staticpublicintgetX()returnx;
staticpublicvoidsetX(intnewX)x=newX;
publicintgetY()returny;
publicvoidsetY(intnewY)y=newY;
publicclassShowDemopublicstaticvoidmain(Stringargs)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,如果在后面试图重新对它赋值,将产生编译错误。
另外,常量名一般用大写字母。
常量和直接量一样不占用内存空间。
(11)ffinalinal成员只能被初始化一次;
成员只能被初始化一次;
(22)ffinalinal成员必须在声明时或者在构造方法中被初始化,而不能在其他的地方被初始化。
成员必须在声明时或者在构造方法中被初始化,而不能在其他的地方被初始化。
(33)对于对于finalstaticfinalstatic类型成员变量,类型成员变量,staticstatic使得变量只存在一个副本,使得变量只存在一个副本,finalfinal使得它不能被改变。
使得它不能被改变。
transient过渡变量过渡变量Java语言目前对transient修饰符没有明确说明,它一般用在对象序列化(objectserialization