'A'和"A"不同
声明一个变量之后,必须用复制语句对变量进行显式初始化,不能直接使用未被初始化的变量否则会引发Error--variable not initialzed(变量未被初始化)
for循环是在确定循环次数的情况下使用
识别类的简单规则是在分析问题的过程中寻找名词,而方法对应着动词。
例如在订单处理系统中,有这样一些名词:
项目(Item) 订单(Order) 送货地址(Shipping address) 付款(Payment) 账户(Account)
这些名词很可能成为类Item、Order等。
查看动词:物品项目被添加到订单中,订单被发送或取消,订单货款被支付。对于每一个动词如:“添加”、“发送”、“取消”以及“支付”,都要标识出主要负责完成对应动作的对象。例如,当一个新的条目添加到订单中时,那个订单对象就是被指定的对象,因为它知道如何存储条目以及如何对条目进行排序。也就是说,add应该是Order类的一个方法,而Item对象是一个参数。
参数传递的过程中,如果参数是基本数据类型,不会修改原值,如果是引用数据类型,因为传递的是地址,对象引用同一个地址,操作的是同一个对象,所以会修改对象中的属性值
一个方法不能修改一个基本数据类型的参数
一个方法可以改变一个对象参数的状态
一个方法不能让对象参数引用一个新的对象
域与局部变量的主要不同点:必须明确的初始化方法中的局部变量,但是如果没有初始化类中的域,将会被初始化为默认值(0,false,null)
可以调用方法对域进行初始化
class Employee{
private static int nextId;
private int id = assignId();
...
private static int assignId(){
int r = nextId;
nextId++;
return r;
}
}
类设计技巧:
1,一定要保证数据私有
2,一定要对数据初始化
3,不要在类中使用过多的基本类型
4,不是所有的域都需要独立的域访问器和域更改器
5,将职责过多的类进行分解
6,类名和方法名要能够体现它们的职责
只能在集成层次内进行类型转换
在讲超累转换成自雷之前,应该使用instanceof进行检查
if(staff[1] instanceof Manager){
boss = (Manager) staff[1];
}
声明一个变量之后,必须用复制语句对变量进行显式初始化,不能直接使用未被初始化的变量否则会引发Error--variable not initialzed(变量未被初始化)
for循环是在确定循环次数的情况下使用
识别类的简单规则是在分析问题的过程中寻找名词,而方法对应着动词。
例如在订单处理系统中,有这样一些名词:
项目(Item) 订单(Order) 送货地址(Shipping address) 付款(Payment) 账户(Account)
这些名词很可能成为类Item、Order等。
查看动词:物品项目被添加到订单中,订单被发送或取消,订单货款被支付。对于每一个动词如:“添加”、“发送”、“取消”以及“支付”,都要标识出主要负责完成对应动作的对象。例如,当一个新的条目添加到订单中时,那个订单对象就是被指定的对象,因为它知道如何存储条目以及如何对条目进行排序。也就是说,add应该是Order类的一个方法,而Item对象是一个参数。
参数传递的过程中,如果参数是基本数据类型,不会修改原值,如果是引用数据类型,因为传递的是地址,对象引用同一个地址,操作的是同一个对象,所以会修改对象中的属性值
一个方法不能修改一个基本数据类型的参数
一个方法可以改变一个对象参数的状态
一个方法不能让对象参数引用一个新的对象
域与局部变量的主要不同点:必须明确的初始化方法中的局部变量,但是如果没有初始化类中的域,将会被初始化为默认值(0,false,null)
可以调用方法对域进行初始化
class Employee{
private static int nextId;
private int id = assignId();
...
private static int assignId(){
int r = nextId;
nextId++;
return r;
}
}
类设计技巧:
1,一定要保证数据私有
2,一定要对数据初始化
3,不要在类中使用过多的基本类型
4,不是所有的域都需要独立的域访问器和域更改器
5,将职责过多的类进行分解
6,类名和方法名要能够体现它们的职责
只能在集成层次内进行类型转换
在讲超累转换成自雷之前,应该使用instanceof进行检查
if(staff[1] instanceof Manager){
boss = (Manager) staff[1];
}