类是将数据和方法封装在一起的一种数据结构,其中数据表示类的属性,方法表示类的行为,所以定义类实际上就是定义类的属性与方法。用户定义一个类实际上就是定义一个新的数据类型。在使用类之前,必须先定义它,然后才可利用所定义的类来声明相应的变量,并创建对象,这与声明一个基本类型的变量(如int x)实质上是一个概念,只是基本数据类型是系统定义好的,无须用户定义。
1.类的一般结构
定义类又称为声明类,其一般的语法结构如下:
其中,方括号[]中的修饰符是可选项,它是一组限定类、成员变量和成员方法是否可以被程序里的其他部分访问和调用的控制符。其中,类修饰符分为公共访问控制符、抽象类说明符、最终类说明符和缺省访问控制符四种。各修饰符的含义如表6.1所示。
表 1 类修饰符的含义
一个类可以有多个修饰符,且无先后顺序之分,但abstract和final相互对立,所以不能同时应用在一个类的定义中。
2.成员变量
一个类的成员变量描述了该类的内部信息,一个成员变量可以是基本类型变量,也可以是对象、数组等其他引用型数据。成员变量的格式如下:
[修饰符]变量类型变量名[=初值];
成员变量的修饰符有访问控制符、静态修饰符、最终修饰符、过渡修饰符和易失修饰符等,其含义如表6.2所示。
表 2 成员变量修饰符的含义
除了访问控制修饰符有多个之外,其他的修饰符都只有一个。一个成员变量可以被两个以上的修饰符同时修饰,但有些修饰符是不能同时定义在一起的。
说明 :在定义类的成员变量时,可以同时赋初值,表明成员变量的初始状态,但对成员变量的操作只能放在方法中。
3.成员方法
类的方法是用来定义对类的成员变量进行操作的,是实现类内部功能的机制,同时也是类与外界进行交互的重要窗口。声明方法的语法格式如下:
说明 :如果不需要传递参数到方法中,只需将方法名后的圆括号写出即可,不必填写任何内容。另外,若方法没有返回值,则返回值的数据类型应为void,且return语句可以省略。在方法的定义中修饰符是可选项。方法的修饰符较多,包括访问控制符、静态修饰符、抽象修饰符、最终修饰符、同步修饰符和本地修饰符等,其含义如表6.3所示。
表 3 成员方法修饰符的含义
成员方法与成员变量同样有多个控制修饰符,当用两个以上的修饰符来修饰同一个方法时,需要注意,有的修饰符之间是互斥的,所以不能同时使用。
下面定义前面叙述过的圆柱体类如下:
4.成员变量与局部变量的区别
由类和方法的定义可知,在类和方法中均可定义属于自己的变量。类中定义的变量是成员变量,而方法中定义的变量是局部变量。类的成员变量与方法中的局部变量是有一定区别的。
(1)从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public、private、static等修饰符所修饰,而局部变量则不能被访问控制修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。
(2)从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存在于栈内存的。
(3)从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失。
(4)成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被final修饰但没有被static修饰的成员变量必须显式地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。