原创:simon
类定义中的类体部分主要包含三个成分:实例变量,构造器和方法,这三个成分称为类的成员。其中实例变量用来保存类的状态,构造器用来对类的实例进行初始化,方法将用来赋予类强大的能力,来完成一些工作。
下面我们就组成类体的三个成分分别进行说明:
构造器:
构造器的作用就是对类的实例进行初始化。构造器的名字必须和类名称相同。比如例子中展示的类Stack的构造器也叫Stack。Java允许类可以有多个构造器,但所有的构造器名称都要相同,要和类名称相同,但每个构造器的参数数量和类型是不同。编译器会根据参数的数目和类型来准确的判断应该使用哪个构造器来对类的实例进行初始化。一般的情况下,构造器主要就是对类的实例变量进行初始化。编译器会根据你调用构造器时所使用的参数的个数和类型来选择准确的构造器。
当你编写一个类的时候,你也可以不给类定义构造器,此时Java的运行环境会自动使用默认的构造器来对类实例进行初始化。
实例变量:
在上面的例子中我们使用了一个实例变量:
private Vector items;
实例变量用来描述类的状态。注意:为了声明实例变量我们应该将上面这条语句方法类体中,但不能放在类的方法声明中。在方法中声明的变量是方法的本地变量,和我们现在提到的实例变量是不一样的。
accessLevel Indicates the access level for this member
static Declares a class member
final Indicates that it is constant
transinet This variable is transient
volatile This variable is volatile
type name The type and name of the variable
上面就是声明一个实例变量的语法成分,其中type name是声明一个实例变量必须要有的,type用来说明实例变量的数据类型,也就说明该变量可以用来存放的值的类型,name是实例变量的名称,变量名可以由任何合法的字符组成,首字符应该是一个字母。在一个类中,实例变量应该是唯一的,不能存在两个名称相同的实例变量,但你可以在该类的子类中重新定义一个实例变量和你的超类的实例变量名称相同,这时,子类的实例变量会覆盖掉超类的实例变量,另外实例变量的名称可以和类中的某个方法的名称相同。
除了type name之外,下面我们对其他的成分进行一下说明:
accessLevel
你可以使用这个修改符来控制其他类对该实例变量的访问方式,不同的访问方式包括:public,protected,package,和private。
static
声明一个类变量,这个变量在不声明类实例的情况下就可以使用,使用的方式是:对象名.变量名
final
使用这个修改符实际上上是定义了常量,他的值是不能被改变的。所以你不能在程序中去修改他的值,如果你试图这样做的话,结果将是在编译的时候发生错误。
transient
这中控制方式实际上不是Java语言主要的控制方式,主要是在serialization对象中使用。
volatile
这个修改符用来通知编译器不要在编译的时候对实例变量进行优化,这是一个Java的高级特性,一般很少用到他。
方法:
向你所知道的那样,对象有一个能力就是去执行一些方法,其他类的对象可以通过调用该类的方法来让该类执行一定的操作,下面我们就来看看如何在你的程序中给类填加方法。
public Object push(Objec item)
{
items.addElement(item);
return item;
}
上面的例子定义了一个方法,通过这个例子我们可以分析一下,一个方法的定义应该包括两大部分,一个就是方法声明,一个是方法体。
方法声明用来定义类的各种性质,例如访问级别,返回类型,名称和参数等等。
accessLevel Access level for this method
static This is a class method
abstract This method is not implemented
final Method cannot be overridden
native Method implemented in another language
synchronized Method requires a monitor to run
returnType methodname The return type and method name
(paramlist) The list of arguments
throws exceptions The exceptions thrown by this method
上面就是声明一个方法的语法成分,一样其中rutuenType mehtodname是在声明一个方法的时候必须要有的,其中methodname是方法的名称。returntype是方法的返回值类型。