第4章 对象和类

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 block
static
{
Random gen=new Random();
nextId=gen.nextInt(10000);
}

7.包

8.类路径

9.文档注释

10.类设计技巧

(1)一定要保证数据私有
(2)一定要对数据初始化
(3)不要在类中使用过多的基本类型
(4)不是所有的域都需要独立的域访问器和域更改器
(5)将职责过多的类分解
(6)类名和方法名要能够体现他们的职责
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值