Java程序设计教程
上QQ阅读APP看书,第一时间看更新

2.3 创建和使用类

Java中的类分为预定义和自定义两大部分。Java的预定义类包含于Java JDK和API的类库中,主要用于实现一些特定的、工具性质的操作。开发人员可以直接或通过new关键字创建的类对象来使用预定义类及其中包含的方法。例如,前面使用过的System.out.println()就是调用了Java预定义的System类中out成员的println()方法。但由于System类是静态的,所以不需要使用new关键字创建其对象就可以直接使用。自定义类是由开发人员根据设计需要自行定义的类,用于描述一些与程序设计相关的实体对象。

2.3.1 类的管理和类成员

在开始创建类之前首先需要理解Java的类管理机制以及类的基本成员和这些成员在类中的作用。

1.Java中类的管理机制

Java规定一个源程序文件中最多只能有一个使用public修饰符的类,而且源程序文件名必须与该类的名称一致。面对Java中存在的大量预定义类和用户自定义类,为了避免文件名冲突,Java使用“包”(package)来管理数量众多的类。Java将功能相近的类划归到一个包中,包中还可以存在下一级的包,这样只要保证在同一个包中没有名称冲突就可以了。描述类时使用“包名1.包名2.……包名n.类名”的方式。习惯上常使用“组织名.项目名.类名”的分级方式。

(1)package语句

如果要为自定义类创建所属的包,就必须以package语句作为Java源文件的第一条语句,该语句用于指明文件中定义的所有类隶属于哪一个包。其语法格式如下:

例如:

(2)import语句

若要在应用程序中使用隶属于某包中的类,就需要使用包含包各层级的类的完整描述方式。为了减少代码录入量,使程序更加简练清晰,可以使用import语句向Java源程序导入某包中相关的类或某包中所有类。例如:

若不使用import语句,则代码中引用的类必须写完整的名称。例如:

需要说明以下两点:

1)Java为所有应用程序自动隐含地导入了java.lang包中的所有类,因此,需要使用其中的任何类时无须再使用import语句。

2)如果希望导入某个包中的所有类,可以使用星号“*”通配符。例如:

2.类成员和修饰符

一个Java类中主要包含有描述类状态的特征变量(也称为字段、数据字段或属性)和方法两大部分。方法又分为用于初始化对象的构造方法和用于实现程序功能的实例方法(简称为方法)。类的一般结构如下:

类修饰符和成员修饰符用于说明类及其成员可以被访问的范围或其他一些特性。由于构造方法是用于创建对象时使用的,所以其修饰符一般要使用public。

类的修饰符常用的有public(公有的)、private(私有的)、protected(受保护的)、默认的和abstract(抽象的),字段成员常用修饰符与前面介绍过的方法的修饰符及其含义基本相同。

2.3.2 创建类

创建一个自定义类通常需要完成声明类的字段成员、构造方法成员和方法成员3个步骤。由于类中用于存储数据的字段和用于实现程序功能的方法是相互独立的,所以一个类中可能不包含字段或不包含任何方法。

例如,下列代码创建了一个名为Circle1的类,该类包含一个用于表示半径的radius字段,不包含任何用于实现功能的方法,不包含任何显式声明的构造方法。

又如,下列代码创建了一个名为Circle2的类,该类包含了两个根据接收到的半径参数计算圆面积和圆周长的getArea()和getPerimeter()方法,但不包含任何字段成员和显式声明的构造方法。

在Eclipse环境中可以将自定义类与主类书写到同一个源程序文件中,也可以将它们分别书写到不同的源文件中。如果在一个Java应用程序项目中存在有多个类,无论它们是否在同一个源程序文件中,编译器都会将它们分别编译成多个对应的字节码(.class)文件,存储在项目文件夹下的bin子文件夹中。

在Eclipse环境中创建自定义类有以下两种途径。

1)直接将类写在主类所在的源程序文件中。使用这种方式时要注意Java规定一个源程序文件(.java)中只有一个类能使用public修饰符,并且源程序文件名必须与该类的类名相同。所以,此时自定义类可使用默认修饰符。

2)在创建了应用程序项目、主类和主方法后,在包资源管理器中右击项目名称,在弹出的快捷菜单中执行“新建”→“类”命令,在打开的对话框中填写自定义类名及需要使用的修饰符即可。使用这种方式时,Eclipse会将自定义类存储在一个以类名命名的源程序文件中,该文件与主类的源程序文件一样存储在项目文件夹下的src子文件夹中。编译后的字节码文件(.class)也被存储在项目文件夹下的bin子文件夹中。

【演练2-7】在Eclipse环境中创建一个公有的Teacher类,该类包含有id(编号)、name(姓名)、sex(性别)、unit(单位)和jobTitle(职称)5个公有的String类型字段;包含一个根据职称返回对应double类型津贴值的公有getSubsidy()方法。假设,津贴发放标准为:教授为1000元;副教授为800元;其他为500元。

类的创建步骤如下。

1)首先在Eclipse中新建一个Java应用程序项目YL2_7,并创建主类和主方法存根。

2)由于Teacher类要求是公有的,所以不能在主类源程序文件中创建。在包资源管理器中右击项目名称,在弹出的快捷菜单中执行“新建”→“类”命令,在弹出的对话框中填写类名为Teacher,选择使用公用修饰符后单击“完成”按钮。

3)按如下所示编写类代码。

设计完毕后在包资源管理器中可以看到图2-10所示的整个项目的类结构图。可以看出项目由两个类(主类YL2_7和Teacher类)组成,这两个类各自创建在与类名相同的源程序文件中。此外,还可以看到这两个类的所有成员。在类YL2_7的图标下方有一个绿色三角标记,表示该类为项目的主类。

图2-10 包资源管理器中的类结构

2.3.3 字段与局部变量的区别

类的字段成员实际上是类内部的一系列变量,其声明的语法格式与声明局部变量的语法格式完全相同。类中局部变量只能出现在方法的定义过程中,它与字段有着本质上的区别。

1)字段是属于类的,用于存储类中的数据,可以使用public、private、static等修饰符来限制来自外部的访问。而局部变量属于方法,可以是方法的参数或方法内用于存储临时数据的变量,不能使用任何修饰符。

2)从变量在内存中的存储形式看,字段是对象的一部分,它随对象一起存储在堆内存中。方法中的局部变量与其他局部变量一样,只能存储在栈内存中。

3)从变量在内存中的生命周期来看,字段随对象的创建而建立,一般需要通过Java的垃圾回收机制进行销毁。局部变量只有在方法被调用时才被建立,方法运行结束局部变量将被立即销毁。

4)在一般情况下字段如果没有被赋予初始值,则会被自动赋以类型的默认值(使用了final修饰符,但没有使用static修饰符的字段是一种例外)。局部变量不会自动赋值,必须显式的赋值后才能被使用。

2.3.4 创建和使用类的对象

在一个Java项目中创建了某个类之后,通常还需要在程序中创建类的对象,并通过对象访问类的字段、调用类的方法,这个过程也称为“类的实例化”。创建类对象的基本语法格式如下:

例如:

访问对象就是访问对象成员,即在应用程序中使用由类创建的对象,其代码编写格式与访问一般常用对象的代码格式完全相同。例如,在【演练2-7】的主方法中使用代码创建Teacher类的对象teacher,并为其各字段赋值,调用getSubsidy()方法显示当前教师的津贴值。程序运行结果如图2-11所示。

图2-11 程序运行结果