一、
General Techniques
1、
引数以
by value
方式而非
by reference
方式传递
2、
对于不变的
data
和
object reference
使用
final ,final
仅仅令
object reference
自身成为不变量,但并不限制它所指向对象的改变
3、
缺省情况下,所有
non-static
都可以被覆写,不然
,
则用
final
防止覆写
4、
vector
容器包含的是对象,与
arrays
要区别,但我认为
Vector
的功能实际上有些像跟
Array List
差不多,只是
vector
现在不经常使用
5、
多态优于
instanceof
,只有在不得已的情况下使用
“如果你根据对象的型别来触发行为,那就改给自己一个耳光”
例如,当你必须从一个
base type
做向下转型为
derived type
的时候,必须使用它
….
Vector shapeVector = new Vector(10);<!----><o:p></o:p>
shapeVector.add(new Triangle());<o:p></o:p>
shapeVector.add(new Triangle());<o:p></o:p>
shapeVector.add(new Circle());<o:p></o:p>
//...<o:p></o:p>
//Assume many Triangles and Circles are added and removed<o:p></o:p>
//...<o:p></o:p>
int size = shapeVector.size();<o:p></o:p>
for (int i=0; i<size; i++)<o:p></o:p>
{<o:p></o:p>
Object o = shapeVector.get(i);<o:p></o:p>
if (o instanceof Triangle)<o:p></o:p>
{<o:p></o:p>
if (((Triangle)o).isRightTriangle())<o:p></o:p>
{<o:p></o:p>
//...<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
else if (o instanceof Circle)<o:p></o:p>
{<o:p></o:p>
double rad = ((Circle)o).radius();<o:p></o:p>
//...<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
6
、一旦不需要对象的引用,就将它设为
null
;
<o:p>
</o:p>
尽管有
GC,
你还是要关注的你的代码如何运用内存;
<o:p>
</o:p>
<o:p>
</o:p>
<o:p> </o:p>
二、
对象与相等性
<o:p>
</o:p>
7
、区分
reference type
和
primitive type
,理解他们的差异,你会在运用他们时候做出明智的
<o:p>
</o:p>
选择;
<o:p>
</o:p>
Boolean(boolean)<o:p></o:p>
Character(char)<o:p></o:p>
Byte(byte)<o:p></o:p>
Integer(int)<o:p></o:p>
Float(float) <o:p></o:p>
Long(long)<o:p></o:p>
Short(short)<o:p></o:p>
Double(double)<o:p></o:p>
基本型别相等,只要是值相等就可以拉,不管是不是同一类型;而引用类型必须则按照引用的比较方式来比较,譬如
equals();<o:p></o:p>
<o:p> </o:p>
8
、
java.lang.object
提供的
equals()
方法很多时候不是你想要的,你需要自己写一些比较的方法
<o:p>
</o:p>
public boolean equals(Object obj)<o:p></o:p>
{<o:p></o:p>
<o:p> </o:p>
if (this == obj)<o:p></o:p>
return true;<o:p></o:p>
<o:p> </o:p>
if (obj != null && getClass() == obj.getClass())<o:p></o:p>
{<o:p></o:p>
Golfball gb = (Golfball)obj; //Classes are equal, downcast.<o:p></o:p>
if (brand.equals(gb.brand()) && //Compare attributes.<o:p></o:p>
make.equals(gb.make()) &&<o:p></o:p>
compression == gb.compression())<o:p></o:p>
{<o:p></o:p>
return true;<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
return false;<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
三、
java
异常
<o:p>
</o:p>
1、
try,cacth,finally<o:p></o:p>
<o:p> </o:p>
不要将
catch
的异常覆盖掉,在这样的情况下,我们要专门把异常保存下来,如用一个
vector
保存;
<o:p>
</o:p>
不要忽略任何一个异常,因为异常一旦出现,抛出异常的那个线程将会终止;
<o:p>
</o:p>
将一个异常加入到
throw
子句,会影响到调用它的所有函数
<o:p>
</o:p>
使用
finally
防止资源泄露,譬如在连接数据库的时候在
finally
中关闭连接;
<o:p>
</o:p>
不要从
try
字段中返回;
<o:p>
</o:p>
不要用
try
、
catch
用于流程控制
;<o:p></o:p>
不要每逢出错的使用
try
和
catch;<o:p></o:p>
不要在构造函数中抛出异常;
<o:p>
</o:p>
抛出异常前,请将对象置为有效状态;
<o:p>
</o:p>
四、
性能
<o:p>
</o:p>
1、
先把焦点放在设计,数据机构和算法方面
<o:p>
</o:p>
2、
如果进行字符串的拼接,用
String Buffer
比
String
快许多倍
<o:p>
</o:p>
3、
在面向对象中,对象的创建是昂贵的,因此需要将对象的创建成本降到最低,减少一些没有必要的对象,在非必要的时候,别产生你的对象
<o:p>
</o:p>
4、
将同步减少到最低,增加
stack
的使用
<o:p>
</o:p>
5、
使用基本型别代码会更快
<o:p>
</o:p>
6、
在使用
vector
时候,用
get()
来获取对象,而不是
Interator<o:p></o:p>
7、
优先使用
array,
再考虑
ArrayList
与
Vector
,如果不需要
vector
的同步特性,考虑使用
ArrayList<o:p></o:p>
8、
尽可能的重复使用对象,这比重新创建对象更有效
<o:p>
</o:p>
9、
使用缓式评估,延迟计算,不必要的计算永远都不要计算
<o:p>
</o:p>
10、
手动优化你的代码,特别是执行的顺序
<o:p>
</o:p>
分享到:
相关推荐
《Practical Java》是侯捷老师的一本关于Java编程实践的书籍,旨在帮助读者深入理解Java语言,并通过实际代码示例提升编程技能。这本书涵盖了Java的基础到进阶内容,是学习和提升Java技术的重要资源。 1. **Java...
《Practical Java全书源码》是一份宝贵的资源,它涵盖了J2ME(Java 2 Micro Edition)平台上的手机游戏开发。J2ME是Oracle公司为小型设备和嵌入式系统设计的一种Java平台,广泛应用于早期的移动设备,如功能手机和...
《实用Java编程(含源码)》是一本专注于解决Java编程实际问题的书籍,它针对的是Java程序员在日常开发过程中可能会遇到的各种困扰和难题。这本书的目的是为了解答那些经常出现但又容易让人迷惑的问题,从而提升Java...
《实用Java(中文版)》是一本由资深Java编程专家撰写的指南,旨在提供实际、高效且具有针对性的Java编程实践经验。这本书经过侯捷的翻译,确保了内容的准确性和可读性,对于中文读者来说,是学习和提升Java技能的...
《Practical Java》中文版随书源码是一个包含与J2ME手机游戏开发相关的实践教程资源。这本书通过实例深入浅出地介绍了Java编程语言在移动平台上的应用,特别是针对Java Micro Edition (J2ME)环境。J2ME是Java的一个...
它可能提供了与《Practical Java》一书相关的在线资源,帮助读者扩展学习或解决问题。 "PracticalJavaCode"文件名暗示这是一份包含实际Java代码的文件夹或压缩文件。在学习Java编程时,实际的代码示例是至关重要的...
《Practical Java》是一本由资深Java专家编写的实践性指南,旨在帮助读者深入理解Java编程语言,并提供改进代码质量的实用策略。这本书的核心在于68个关键主题,每个主题都针对一个特定的编程问题或最佳实践,旨在...
### 实践1:Java中的参数传递机制 #### 参数传递方式:值传递 vs 引用传递 在Java中,参数是以**值传递**(by value)的方式传递给方法的,而不是很多人误解的**引用传递**(by reference)。这种误解往往来源于Java...
Practical Java viii 2 對象與相等性(Objects and Equality) 25 實踐8:區分reference type 和primitive type 25 實踐9:區分== 和 equals() 29 實踐10:不要倚賴equals()的缺省實現33 實踐11:實現equals()時必須...
《Practical Java》是Java编程领域的一部经典之作,作者为(美)海格尔,它与《Effective Java》齐名,都是程序员提升编程技能的重要参考资料。本书深入浅出地介绍了如何编写高质量、高效的Java程序,旨在帮助开发者...
Deep Learning: Practical Neural Networks with Java by Yusuke Sugomori English | 8 Jun. 2017 | ASIN: B071GC77N9 | 1057 Pages | AZW3 | 20.28 MB Build and run intelligent applications by leveraging key ...
Practical Java Game Programming Chapter 1 - Java as a Game Platform Chapter 2 - Fundamentals of Game Programming Chapter 3 - 2D Graphics Programming Chapter 4 - Creating Game Audio Using Java...
《Practical Java》是Java编程领域的一本经典教程,由著名技术翻译家侯捷先生翻译。这本书深入浅出地介绍了Java编程语言的核心概念和技术,旨在帮助读者从实践角度理解和掌握Java编程。书中涵盖的内容广泛,从基本...
本资源“Practical Java Source Code”旨在提供一系列实际应用中的Java代码示例,帮助开发者深入理解Java编程的实践操作。 Java的核心特性包括面向对象、平台独立性(通过Java虚拟机JVM实现)、丰富的类库、强大的...
《实用Java》是一本备受推崇的Java编程教材,它的核心理念是通过实践来教授Java编程,使得学习者能够深入理解语言的本质和应用。书中涵盖了Java的基础语法、面向对象编程概念、异常处理、集合框架、多线程、网络编程...
标题《Practical database programming with Java》和描述《Practical database programming with Java》提到了关于Java数据库编程的实际应用,但给出的内容部分并非直接相关的知识说明,而是涉及书籍信息、版权声明...