第 4 章 对象与类

Posted clipboard

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第 4 章 对象与类相关的知识,希望对你有一定的参考价值。

4.1 面向对象程序设计概述

4.1.2 对象,93

对象的行为(behavior)—— 方法
对象的状态(state)—— 域
对象标识(identity)—— 实例

4.1.4 类之间的关系,94

依赖(“uses-a”)
组合(“has-a”)
继承(“is-a”)

4.2 使用预定义类

4.2.2 Java 类库中的 LocalDate 类,98

日历表示法
不可变的类

4.3 用户自定义类

4.3.1 Employee 类,103

实例域
构造器
实例方法

4.3.2 多个源文件使用,105

两种编译源程序的方法。

使用通配符调用 Java 编译器:

Java Employee*.java

键入以下命令:

javac EmployeeTest.java

Java 编译器内置了 make 功能。

4.3.4 构造器,106

初始化实例域

  1. 构造器与类同名
  2. 每个类可以有一个以上的构造器(重载)
  3. 构造器可以有 0 个、1 个或多个参数(隐式参数 this
  4. 构造器没有返回值
  5. 构造器总是伴随着 new 操作一起调用

4.3.5 隐式参数与显式参数,108

关键字 this 表示隐式参数,一个对象的引用。

4.3.8 私有方法,111

4.3.9 final 实例域,112

构建对象时必须初始化 final 实例域。final 实例域的值设置之后,不能够再对它进行修改。

final 修饰符大都应用于基本(primitive)类型域,或不可变(immutable)类的的域(如果类中的每个方法都不会改变其对象,这种类就是不可变的类。)

对于可变的类,使用 final 修饰符可能会对读者造成混乱。

4.4 静态域与静态方法

4.4.1 静态域,112

属于类,而不属于独立的对象。

4.4.2 静态常量,113

Math.PI

System.out

4.4.3 静态方法,114

静态方法是一种不能向对象实施操作的方法。

可以认为静态方法是没有 this 参数的方法,没有隐式参数。

在下面两种情况下使用静态方法:

  1. 一个方法不需要访问对象状态,其所需参数都是通过显式参数提供。
  2. 一个方法只需要访问类的静态域。

Java static 关键字的含义:属于类且不属于类对象的变量和函数。

4.4.4 工厂方法,115

4.4.5 main 方法,115

每一个类可以有一个 main 方法。这是一个常用于对类进行单元测试的技巧。

4.5 方法参数,118

按值调用(call by value)
按引用调用(call by reference)

Java 语言采用按值调用。方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。

4.6 对象构造

4.6.2 默认域初始化,123

隐式域初始化:0、false、null

4.6.3 无参数的构造器,124

4.6.4 显式域初始化,125

在声明中赋值

4.6.5 参数名,125

一种常用的技巧: 参数使用同名屏蔽实例域,实例域采用 this 形式访问。

this 指示隐式参数,也就是所构造的对象。

4.6.6 调用另一个构造器,126

this(...)

4.6.7 初始化块,127

三种初始化数据域的方法:

  1. 在声明中赋值
  2. 在初始化块中设置值
  3. 在构造器中设置值

为了避免循环定义,不要读取在后面初始化的域。 参考 Java 语言规范 8.3.2.3 节。

建议将初始化块放在域定义之后。

调用构造器的具体处理步骤:

  1. 所有数据域初始化为默认值(0、false、null)。
  2. 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。
  3. 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。
  4. 执行这个构造器主体。

两种初始化静态域的方法:

  1. 在声明中赋值
  2. 在静态初始化块中设置值

在类第一次加载的时候,将会进行静态域的初始化。

调用构造器的具体处理步骤(静态域、静态初始化块):

  1. 静态域初始化、静态初始化块(在类第一次加载的时候,依照类定义的顺序执行)
  2. 实例域初始化、对象初始化块(依照类定义的顺序执行)
  3. 构造器

4.7 包,131

从编译器的角度来看,嵌套的包之间没有任何关系。
例如,java.util 包 与 java.util.jar 包 毫无关系。
每一个都拥有一个独立的类集合。

4.10 类设计技巧,144

  1. 一定要保证数据私有(数据的表现形式很可能会改变,但它们的使用方式却不会经常发生变化。)
  2. 一定要对数据初始化(Java 不对局部变量进行初始化,但是会对对象的实例域进行隐式初始化。应该显式初始化)
  3. 不要在类中使用过多的基本类型(使类更加易于理解且易于修改)
  4. 不是所有的域都需要独立的域访问器和域修改器
  5. 将职责过多的类进行分解
  6. 类名和方法名要能够体现它们的职责(类名:名词、形容词+名词、动名词+名词)
  7. 优先使用不可变的类

以上是关于第 4 章 对象与类的主要内容,如果未能解决你的问题,请参考以下文章

第8章 类的高级概念

第3章 面向对象 (上)

Python参考手册的目录

《数据结构与面向对象程序设计》第4周学习总结

第三周学习《对象与类》心得

第8.2章