零基础Java学习笔记
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3 构造方法与对象

img

构造方法用于将对象中的所有成员变量进行初始化。对象的属性通过变量来刻画,也就是类的成员变量,而对象的行为通过方法来体现,也就是类的成员方法。方法可以通过操作属性形成一定的算法来实现一个具体的功能。类可以把属性和方法封装成一个整体。

4.3.1 构造方法的概念及用途

构造方法是一种特殊的方法,它的名字必须与它所在类的名字完全相同,而且没有返回值,也不需要使用关键字void 进行标识。例如:

img

构造方法用于将对象中的所有成员变量进行初始化,在创建对象时立即被调用。

img

图4.5 Tiger 类的UML 图

1.默认构造方法和自定义构造方法

如果类中定义了一个或多个构造方法,则Java 中不提供默认的构造方法。

【例4.2】 定义Apple 类,在该类的构造方法中初始化成员变量,具体代码如下:

img
img

图4.6 类初始化成员变量的值

程序运行结果如图4.6 所示。

2.构造方法没有返回值

需要注意的是,构造方法没有返回值,例如,下面这段代码,如果强行添加返回值类型则会报错:

img

需要注意的是,如果用户没有定义构造方法,Java 会自动提供一个默认的构造方法,用来实现成员变量的初始化。在Java 中,各种类型变量的初始值如表4.1 所示。

表4.1 各种类型变量的初始值

img

4.3.2 对象的概述

在面向对象语言中,对象是对类的一个具体描述,是一个客观存在的实体。“万物皆对象”,也就是说,任何事物都可以被看作对象,如一个人、一个动物,或者没有生命体的轮船、汽车、飞机,甚至概念性的抽象,如公司业绩等。

一个对象在Java 中的生命周期包括创建、使用和销毁3 个阶段。

4.3.3 对象的创建

对象是类的实例。Java 定义任何变量都需要指定变量类型,因此,在创建对象之前,一定要先声明该对象。

1.对象的声明

声明对象的一般格式如下:

img

●类名:必选参数,用于指定一个已经被定义的类。

●对象名:必选参数,用于指定对象的名称。对象名必须是合法的Java 标识符。

例如,声明Apple 类的一个对象redApple 的具体代码如下:

img

2.实例化对象

在声明对象时,只是在内存中为其建立一个引用,并设置初始值为null,表示不指向任何内存空间。

在声明对象后,需要为对象分配内存,这个过程被称为实例化对象。在Java 中使用关键字new 来实例化对象,具体语法格式如下:

img

●对象名:必选参数,用于指定已经被声明的对象名。

●类名:必选参数,用于指定构造方法名,即类名,因为构造方法名与类名相同。

●参数列表:可选参数,用于指定构造方法的入口参数。如果构造方法无参数,则可以省略。

在声明Apple 类的一个对象redApple 后,可以通过以下代码为对象redApple 分配内存(即创建该对象):

img

这相当于同时执行了对象声明和创建对象:

img

4.3.4 对象的使用

在创建对象之后,不仅可以访问对象的成员变量,并改变成员变量的值,而且可以调用对象的成员方法。通过使用运算符 “.” 实现对成员变量的访问和成员方法的调用。

其语法格式如下:

img

【例4.3】 定义一个类,创建该类的对象,同时改变对象的成员变量的值并调用该对象的成员方法。例如,创建一个名称为Round 的类,在该类中定义一个常量PI、一个成员变量r、一个不带参数的方法getArea() 和一个带参数的方法getCircumference()。Round类的具体代码如下:

img
img

程序运行结果如图4.7 所示。

img

图4.7 圆面积和圆周长的计算结果

4.3.5 对象的销毁

在许多程序设计语言中,需要手动释放对象所占用的内存,而在Java 中不需要手动完成这项工作。Java 提供的垃圾回收机制可以自动判断对象是否还在使用,并且能够自动销毁不再使用的对象,回收被销毁的对象所占用的资源。

Java 提供了一个名称为finalize() 的方法,用于在对象被垃圾回收机制销毁之前执行一些资源回收工作,并由垃圾回收系统调用。但是垃圾回收系统的运行是不可预测的。finalize() 方法没有任何参数和返回值,每个类有且只有一个finalize() 方法。