第4章 对象和类

来源:互联网 发布:gcc编译器下载 linux 编辑:程序博客网 时间:2024/05/16 18:23

1.面向对象设计概述

类之间的关系:
·依赖(“uses-a”)
·聚合(“has-a”)
·继承(“is-a”)

2.使用预定义类

2.1 构造器
(1)创建新的对象变量必须初始化才能使用。
(2)一个对象变量并没有实际包含一个对象,而是仅仅引用一个对象。

2.2 更改器与访问器 set() get()

3.用户自定义类

3.1 构造器

·构造器与类同名
·每个类可以有一个或一个以上的构造器
·构造器可以没有参数、有一个参数或多个参数
·构造器没有返回值
·构造器总是随着new操作一起调用

3.2 显示参数与隐式参数

显示参数明显地列在方法声明中,关键字this表示隐式参数

3.3 封装

·一个私有的数据域
·一个公有的域访问器方法
·一个公有的域更改器方法
警告:不要编写返回引用对象的访问器方法。使用克隆(clone)。
class Employee{...public Date getHireDay(){return hireDay.clone();}...}

3.4 final实例域

构造对象时必须初始化这样的域,并且后面的操作不能对它进行修改。

4.静态域与静态方法

4.1 静态域

如果将域定义为static,每个类中都有一个这样的域,而每一个对象对于所有的实例域都有自己的一份拷贝。这样的域属于类,而不属于任何对象。

4.2 静态常量


4.3 静态方法

静态方法是一种不能向对象实施操作的方法,没有隐式参数。
在下面两种情况下使用静态方法:
·一个方法不需要访问对象状态,对所需参数都是通过显示参数提供
·一个方法只需要访问类的静态域

5.方法参数

Java采用按值调用,方法得到的是所有参数值的一个拷贝。
·一个方法不能修改一个基本数据类型的参数(数值型和布尔型)
·一个方法可以改变一个对象参数的状态
·一个方法不能让对象参数引用一个新的对象

6.对象构造

6.1 重载

名字相同,参数不同,返回值可以不同

6.2 默认域初始化

构造器中没有显式赋值,数值为0,布尔值为false,对象引用为null。

6.3 无参数的构造器

·如果编写一个类时没有编写构造器,系统就会提供一个无参数构造器。
·如果类中提供了至少一个构造器,没有提供无参数构造器,在构造对象时如果没有提供参数会被视为不合法。

6.4 显式域初始化

在类定义中,直接将一个值赋给任何域。在执行构造器之前,先执行赋值操作。初始值不一定是常量。
//每个雇员都有一个id域class Employee{private static int nextId;private int id=assignId();...private static int assignId(){int r=nextId;nextId++;return r;}...}


6.5 初始化块

class Employee{private static int nextId;private int id;...//object initialization block{id=nextId;nextId++;}...}

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

对于静态域可以使用静态初始化块
//static initialization blockstatic{Random gen=new Random();nextId=gen.nextInt(10000);}

7.包

8.类路径

9.文档注释

10.类设计技巧

(1)一定要保证数据私有
(2)一定要对数据初始化
(3)不要在类中使用过多的基本类型
(4)不是所有的域都需要独立的域访问器和域更改器
(5)将职责过多的类分解
(6)类名和方法名要能够体现他们的职责