对象的传递与返回
1、Java对象以引用的方式传递,但就传递来说,是引用值的传递。
2、尽量避免以参数形式返回值。
3、不能以final来限制对象值的修改,因为final修饰的是引用,只能是其不能指向其他对象。
4、方法内没有局部对象,只有局部引用。
5、引用有作用域,而对象没有。
6、希望一个类可以被克隆:
1)、实现Cloneable接口。
2)、重载clone()。
3)、在你的clone()方法中调用super.clone()。
4)、在你的clone()方法中捕获异常。
7、为什么拷贝构造函数能在C++中可行,在Java中不行:
因为在c++中,可以以对象的局部拷贝来实现,而在Java中引用。
8、在Class中的toString()主要为了打印而实现的。
9、恒常类:String、Integer、Boolean、Float、Double、Char、Byte。
Java程序开发建议:
1、谨记“分而治之”原则。可以把有难度的代码先封装成一个类,后面再实现。
2、在编写类之间先编写测试代码,以验证这个类是否设计完备。
3、引入的间接层次要有意义。
4、建议重新设计类的线索有:
1)、复杂的switch语句,请考虑使用多态。
2)、有许多方法,各自处理类型极为不同的操作,请考虑划分成不同的类。
3)、有许多成员变量,用来表示类型极为不同的属性,请考虑划为不同的类。
4)、其他建议请参考<Refactoring: Improving the Design of Existing Code> Martin Flower著。
5、小心switch语句或嵌套的if-else语句。
这通常预示着“以编程方式判断类型”的代码,也就是说究竟会执行哪一段程序代码,将依据某种类型
信息来判断(开始的时候,可能不清楚确切的类型)。通常可以使用继承和多态机制来替代此类代码:多态方法
在调用时会自动进行类型检查,这样更可靠,扩展起来也更容易。
6、从设计观点来看,要找出变动的因素,并使它和不变的因素分离。
也就是说,找出系统中可能会改变的元素,将它们封装于类中,这样就不会被迫重新设计系统。参考
《Thinking in Patterns (with Java)》(从www.BruceEckel.com下载)。
7、使基类和派生类之间保持“是一个”(is-a)的关系,让类和成员对象之间保持“有一个”(has-a)的关系
。
8、在判断应该使用继承还是组合的时候,考虑一下是否需要向上转型成基础类型。如果不需要,请优先考虑组合
(也就是使用成员对象)。这样可以消除对多个基类的要求。如果你采用继承,用户会假定他们可以向上转型。
9、采用字段来表示数值的变化,使用方法重载来表示行为的变化。
10、小心重载。方法不应该把参数值作为执行代码的条件。在这种情况下,你应该编写两个方法或者多个重载方法作为替代。
11、使用继承和方法重载来表达行为上的差异,使用字段来表示状态的变化。
综合:
1、接口与抽象类的区别
接口中的属性都是static final的,方法都是absract的;接口可以多继承,而抽象类只能单继承;在
interface中,函数不能有行为;
1、Java对象以引用的方式传递,但就传递来说,是引用值的传递。
2、尽量避免以参数形式返回值。
3、不能以final来限制对象值的修改,因为final修饰的是引用,只能是其不能指向其他对象。
4、方法内没有局部对象,只有局部引用。
5、引用有作用域,而对象没有。
6、希望一个类可以被克隆:
1)、实现Cloneable接口。
2)、重载clone()。
3)、在你的clone()方法中调用super.clone()。
4)、在你的clone()方法中捕获异常。
7、为什么拷贝构造函数能在C++中可行,在Java中不行:
因为在c++中,可以以对象的局部拷贝来实现,而在Java中引用。
8、在Class中的toString()主要为了打印而实现的。
9、恒常类:String、Integer、Boolean、Float、Double、Char、Byte。
Java程序开发建议:
1、谨记“分而治之”原则。可以把有难度的代码先封装成一个类,后面再实现。
2、在编写类之间先编写测试代码,以验证这个类是否设计完备。
3、引入的间接层次要有意义。
4、建议重新设计类的线索有:
1)、复杂的switch语句,请考虑使用多态。
2)、有许多方法,各自处理类型极为不同的操作,请考虑划分成不同的类。
3)、有许多成员变量,用来表示类型极为不同的属性,请考虑划为不同的类。
4)、其他建议请参考<Refactoring: Improving the Design of Existing Code> Martin Flower著。
5、小心switch语句或嵌套的if-else语句。
这通常预示着“以编程方式判断类型”的代码,也就是说究竟会执行哪一段程序代码,将依据某种类型
信息来判断(开始的时候,可能不清楚确切的类型)。通常可以使用继承和多态机制来替代此类代码:多态方法
在调用时会自动进行类型检查,这样更可靠,扩展起来也更容易。
6、从设计观点来看,要找出变动的因素,并使它和不变的因素分离。
也就是说,找出系统中可能会改变的元素,将它们封装于类中,这样就不会被迫重新设计系统。参考
《Thinking in Patterns (with Java)》(从www.BruceEckel.com下载)。
7、使基类和派生类之间保持“是一个”(is-a)的关系,让类和成员对象之间保持“有一个”(has-a)的关系
。
8、在判断应该使用继承还是组合的时候,考虑一下是否需要向上转型成基础类型。如果不需要,请优先考虑组合
(也就是使用成员对象)。这样可以消除对多个基类的要求。如果你采用继承,用户会假定他们可以向上转型。
9、采用字段来表示数值的变化,使用方法重载来表示行为的变化。
10、小心重载。方法不应该把参数值作为执行代码的条件。在这种情况下,你应该编写两个方法或者多个重载方法作为替代。
11、使用继承和方法重载来表达行为上的差异,使用字段来表示状态的变化。
综合:
1、接口与抽象类的区别
接口中的属性都是static final的,方法都是absract的;接口可以多继承,而抽象类只能单继承;在
interface中,函数不能有行为;