4.1面向对象程序设计概述
面向对象的程序是由对象组成的,没个对象包含对用户公开的特定功能部分和隐藏的实现部分。在OOP中,不必关系对象的具体实现,只要能满足用户的需求即可。
4.1.1类
类是构造对象的模板或蓝图。
封装是与对象有关的一个重要概念。从形式上来讲封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据成为实力域,操作数据的过程成为方法。
4.1.2对象
对象的三个主要特征:
对象的行为----可以对对象施加哪些操作,或可以对对象施加哪些方法
对象的状态----当施加那些方法时,对象如何响应
对象的标识----如何辨别具有相同行为与状态的不同对象
4.1.4类之间的关系
依赖:如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类
聚合:聚合关系意味着类A的对象包含类B的对象
继承:A类扩展类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能
4.2使用预定义类
4.2.1对象与对象变量
使用构造器构造新实力。构造器的名字与类名相同。
一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
4.3用户自定义类
4.3.4从构造器开始
构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到重新设置实例域的目的。
构造器与类同名、每个类可以有一个以上的构造器、构造器可以有0个、1个或多个参数、构造器没有返回值、构造器总是伴随着new操作一起调用。
private私有。final实例域 不可改变
4.4静态域和静态方法
4.4.1静态域
如果将域定义为static,每个类中只有一个这样的域。它属于类,而不属于任何独立的对象。
4.4.2静态常量
static final
4.4.3静态方法
静态方法是一种不能向对象实施操作的方法。
使用静态方法:
一个方法不需要访问对象状态,其所需参数都是通过显示参数提供
一个方法只需要访问类的静态域
4.5方法参数
方法不能修改传递给它的任何参数变量的内容
一个方法不能修改一个基本数据类型的参数
一个方法刻意改变一个对象的参数的状态
一个方法不能让对象参数引用一个新的对象
4.6对象构造
4.6.1重载
如果多个方法有相同的名字、不同的参数,便产生了重载。
4.6.2默认域初始化
如果构造器没有显式的给域赋值,那么就会被自动地域为默认值:数值为0、布尔值为false、对象引用为null
4.6.3无参数的构造器
如果一个类没有编写构造器,那么系统就会提供一个无参构造器。这个构造器将所有的实例域设置为默认值。
如果勒种提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。
4.6.6调用另一个构造器
使用关键字this可以在构造器中调用另一个构造器
4.6.7初始化块
初始化数据方法:构造器中设置值、声明中赋值、初始化快。
在一个类中可以包含多个代码块,只要构造类对象,这些块就会被执行。
首先运行初始化块,然后才运行构造器。
如果对垒的静态域进行初始化的代码比较复杂,那么可以使用静态的初始化块。
在类第一次加载的时候,将会进行静态域的初始化。
4.6.8finalize
可以为任何类添加finalize方法。finalize方法将在垃圾回收器清除对象前调用。finalize类调用时间随机。
4.7.2静态导入
import static ... 使用方法时不用再加类名前缀。
4.10类设计技巧
一定要保证数据私有
一定要对数据初始化
不要在类中使用过多的基本类型
不是所有的域都需要独立的域访问器和域更改器
将职责过多的类进行分解
类名和方法名要能够体现他们的职责
优先使用不可变的类