Skip to content

1 对象与类

1.1 对象导论

抽象过程

所有编程语言都提供抽象机制。可以认为,人们所能够解决的问题 的复杂性直接取决于抽象的类型和质量。 **面向过程:**是一种以过程为中心的编程思想。以什么正在发生为主要目标进行编程。 **面向对象:**是通过向程序员提供表示问题空间中的元素的工具。我们将问题空间中的元素及其在解空间中的表示称为“对象”。

面向对象编程这种思想的实质是:程序可以通过添加新类型的对象使自身适用于某个特定问题。 因此,当你在阅读描述解决方案的代码的同时,也是在阅读问题的表述。 Booch对对象的描述:对象具有状态、行为和标识。这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为)

每个对象都有一个接口

**接口(方法)确定了对某一特定对象所能发出的请求。**在类型中,每一个可能的请求都有一个方法与之相关联,当向对象发送请求时,与之相关联的方法就会 被调用。此过程通常被概括为:向某个对象“发送消息”(产生请求), 这个对象便知道此消息的目的,然后执行对应的程序代码。

每个对象都提供服务

当正在试图开发或理解一个程序设计时,最好的方法之一就是将对 象想像为**“服务提供者**”。程序本身将向用户提供服务,它将通过调用其他对象提供的服务来实现这一目的。你的目标就是去创建(或者最好是在现有代码库中寻找)能够提供理想的服务来解决问题的一系列对象。

1.2 类

  • 对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
  • :类是一个模板,它描述一类对象的行为和状态。

对象与对象变量

在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。

java
Date deadline = new Date()

上面语句中:表达式new Date() 构造了一个Date类型的对象,并且它的值是对新创建对象的引用。这个引用存储在变量deadline中。

字段和方法

在类中可以设置两种类型的元素:

  • **字段(有时被称作数据成员):**字段可以是任何类型的对象,可以通过其引用与其进行通信;也可以是基本类型中的一种。
    • 字段如果没有进行初始化,会赋予一个默认值。对象类型的字段,默认值为null。
  • **方法(有时被称作成员函数):**决定了一个对象能够接收什么样的消息。方法的基本组成部分包括:名称、参数、返回值和方法体。

构造器

在创建一个对象的时候,至少要调用一个构造方法。每个类都有构造方法。构造方法的名称必须与类同名, **注意:**如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。

创建对象

对象是根据类创建的。在Java中,使用关键字new 来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new 创建对象时,会调用构造方法初始化对象。

2、 对象的初始化

假设有个假设有个名为Dog的类:

  1. 当首次创建类型为Dog的对象时或使用Dog 类的静态方法时,Java解释器必须查找类路 径,以定位Dog.class文件。
  2. 载入Dog.class,此时有关静态(static 成员变量) 的初始化的所有动作都会执行。因此,静态初始化只在Class对象首次加载的时候进行一次
  3. 当用new Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间,这块存储空间会被清零,这就自动地将Dog对象中的所有基本类型数据都设置成了默认值(对数字来说就是0,对布尔型和字符型也相同),而引用则被设置成了null。
  4. 执行所有出现于成员字段定义处的初始化动作。(所以成员字段的初始化发生再构造器方法执行之前)
  5. 执行构造器方法。

💡当涉及到继承的时候,对象初始化的过程会更加复杂