内容提示:类是构造面向对象程序的基本单位,是抽取了同类对象的共同属性和方法形成的对象或实体的“模板”。而对象是现实世界中实体的描述,对象要创建才存在,有了对象才能对对象进行操作。本章主要介绍开发Java程序时必须掌握的类和对象的基础内容,包括类以及包含于类中的方法、对象、以及相关修饰符的说明。
类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。类封装了一类对象的属性和服务(方法),是这一类对象的原型。在前面章节的例题中已经定义了一些简单的类,本节将详细介绍如何创建一个Java类。
一个Java类形式上包括两个部分:类声明部分和类体部分。
其基本格式为:
class 类名{
类体内容
}
class是关键字,用来定义类。语句“class 类名”是类的声明部分,大括号之间是类体。
格式为:
[修饰符] class 类名 [extends 父类名] [implements 接口名列表]
类的修饰符有private、public、abstract、final。一个类可以同时有多个修饰符,当有多个修饰符时这些修饰符没有先后顺序之分,可以按照任意顺序排列。
l private(私有):被修饰的类只能被同一包中的类访问,这是Java默认的方式。
l public(公共):被修饰的类能够被所有的类访问。
l abstract(抽象):被修饰的类不能被实例化,没有实现的方法。
l final(最终):被修饰的类不能被继承,即不能有子类。
需要注意的是,abstract和final不能同时作为一个类的修饰符。
类名是所创建的类的名称,类名可以是任意的Java标识符,根据Java命名的约定,类名每个有意义的单词的首字母要大写,其余字母小写。
extends(继承)关键字用来表明新创建的类继承哪个类,被继承的类称为此类的父类,也就是说extends后面只能跟一个父类的名称。
implements(实现)用来表明这个类实现了哪个接口,接口名称可以有多个。
类体是类的主体部分,包含了所有实现类功能的程序代码。包括成员变量和成员方法,成员变量用来描述类的属性,方法描述类的行为(或功能)。Java类除了继承它的父类中的变量和方法外,一般仍会在类体中明确定义自己的变量和方法。程序中,成员变量应尽量放在方法定义之前。类体要用“{}”括起来。类体定义的格式如下:
类体{
成员变量声明及初始化
方法声明及方法体
}
下面是一个类名为“矩形”的类,成员变量部分定义了3个float类型的变量:“长”、“宽”和“area”,方法部分定义了两个方法:“计算面积”和“修改宽度”。
class 矩形{
float 长, 宽, area; //定义成员变量
float 计算面积{ //方法定义
area=长*宽;
return area;
}
void 修改高(float h){ //方法定义
高=h;
}
}
变量声明中定义的变量被称为类的成员变量,在方法体中定义的变量和方法的参数被称为局部变量。
声明数据成员变量必须给出变量名及其所属的类型,其声明的格式为:
[修饰符] 成员变量类型 成员变量名列表
成员变量的修饰符有:缺省访问修饰符、public、protected、private、final、static、transient和volatile。
l 缺省访问修饰符(friendly):缺省访问修饰符的成员变量可以被同一包中的任何类访问。
l public:修饰的成员变量可以被项目文件中的任何方法访问。
l protected:修饰的成员变量可以被有继承关系的类自由访问,即子类可以访问。
l private:修饰的成员变量只能在同一个类中使用。
l static:修饰的成员变量又称为类变量(或静态变量),不加static修饰的成员变量叫做实例变量(对象变量)。实例变量依附于具体的对象实例,其值因具体对象实例的不同而不同,而类对象为该类的所有对象共享,其值不因类的对象不同而不同。
l final:修饰的成员变量叫做最终成员变量。从一开始创建该变量时就为其设定了一个值,在以后的运行过程中,这个值将一直保持不变,所以又称为常量。
l transient:指名变量是一个暂时性状态。
l volatile:指明变量是一个共享变量,用来修饰由多个并发线程共享的变量,使得各个线程对该变量的访问能保持一致。
成员变量和局部变量的类型可以是Java中任意的数据类型,包括简单类型、类、接口和数组,在一个类中的成员变量名应该是唯一的。例如下面的例子:
class People{
int boy;
float a[];
void b(){
boolean young;
workman littleBoy;
}
}
class workman{
double x;
}
其中People类的成员变量a是浮点型数组变量。方法b中的young和littleBoy是局部变量,其中young是boolean型变量,littleBoy是workman类型变量,即是一个对象。
成员变量在整个类内都有效,而局部变量只在定义它的方法内有效。例如下面的例子:
class clock{
int hour;
int find(){
int a=10;
hour=a; //合法,变量hour在整个clock类内都有效
return hour;
}
void f(){
int y;
y=a; //非法,变量a已经失效,而方法f内没有定义变量a
}
}
虽然成员变量与它在类中的书写位置无关,但不提倡把成员变量的定义分散地写在方法之间或类体的其他部分。
如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即这个成员变量在这个方法内暂时失效,例如:
class ren{
int x=10,y;
void f(){
int x=2;
y=x; //y得到的值是2,不是10
}
}
成员变量若被隐藏后仍然想在该方法内使用成员变量,就必须使用关键字this,在后面的章节中会有详细介绍。
通过声明成员方法可以定义类的行为,行为表示一个对象能够做的事情或者能够从一个对象取得的信息。方法的定义包括两部分,方法声明和方法体。
其基本格式为:
方法声明部分{
方法体的内容
return [表达式]
}