第一部分
一般技术
实践
1
:
参数以
by value
方式而非
by reference
方式传递。
实践
2
:
对不变的
data
和
object reference
使用
final
。注意,
final
仅仅令
object erference
自身成为不变量,并不限制它所指对象的改变。
实践
3
:缺省情况下所有
non-static
函数都可以被重写。
实践
4
:在
arrays
和
vectors
之间慎重选择。
实践
5
:多态
polymorphism
优于
instanceof
。
instanceof
的许多用途都会因为改用多态而消失。使用多态,代码将更清晰、更易于扩展和维护。
实践
6
:必要时才使用
instanceof
。
实践
7
:一旦不再需要
object reference
,就将它设为
null
。
第二部分
对象与相等性
实践
8
:区分
reference
类型和
primitive
类型。
实践
9
:区分
==
和
equals()
。
==
用来测试基本类型的相等性,亦可判定两个
object reference
是否指向同一个对象
。
实践
10
:不要依赖
equals()
的缺省实现。
实践
11
:实现
equals()
时必须深思熟虑。
如果某个
class
所生的两个对象,即使不占用相同的内存空间,也被视为在逻辑上相等,那么需要为该类提供一个
equals()
。
实践
12
:实现
equals()
优先考虑使用
getClass()
,属于同一种类型才有可能相等。
实践
13
:调用
super.equals()
以唤起
base class
的相关行为。任何基类如果实现
equals()
,其继承类都应该调用
super.euals()
。
实践
14
:在
equals()
函数中谨慎使用
instanceof
。唯有考虑允许一个继承类对象可以相等于其基类对象时,才在
equals()
中使用
instanceof
。
实践
15
:实现
equals()
时遵循某些规则。
第三部分
异常处理
实践
16
:认识异常控制流(
exception control flow
)机制。
实践
17
:绝对不可以忽视异常(
Never ignore an exception
)。
实践
18
:千万不要遮掩异常
(Never hide an exception)
。
如果在处理异常期间又从
catch
或
finally
区段抛出异常,原先的异常会因而被隐藏起来。
实践
19
:
明察
throws
子句的缺点。将一个异常加入某函数的
throws
子句,会影响该函数的所有调用者。
实践
20
:细致而全面地理解
throws
子句。
实践
21
:使用
finally
避免资源泄漏
(resource leaks)
。
实践
22
:不要从
try
区段中返回,因为函数未必会立即从那里返回。如果存在
finally
区段,它应付被运行起来并可能改变回传值。
实践
23
:将
try/catch
区段置于循环之外。
实践
24
:不要将异常
exception
用于流程控制。
实践
25
:不要每逢出错就使用异常,只有面对程序行为可能出乎意料的情况下才使用异常。
实践
26
:构造函数并非真正函数,不能进行回传,如果构造失败请抛出异常
实践
27
:抛出异常之前先将对象恢复为有效状态。
第四部分
性能
实践
28
:先把焦点放在设计、数据结构和算法上。
实践
29
:不要依赖编译期优化技术。
实践
30
:理解运行期代码优化技术。
实践
31
:如欲进行字符串连接操作,
StringBuffer
要比
String
快许多倍。
实践
32
:将对象的创建成本降至最小。
实践
33
:慎防未用上的对象。
实践
34
:将同步化降至最低,
synchronized
函数和区段会显著降低性能。
实践
35
:尽可能使用
static
变量。
实践
36
:使用
static
、
final
和
private
函数以促成
inlining
。
实践
37
:
instance
变量的初始化一次就好。
实践
38
:使用基本类型(
primitive types
)使代码更快更小。
实践
39
:不要使用
Enumberation
或
Iterator
来遍历
Vector
,而使用其
get()
函数。
实践
40
:使用
System.arraycopy()
来复制
arrays
。
实践
41
:优先使用
array
,然后才考虑
ArrayList
和
Vector
。
实践
42
:尽可能复用对象。
实践
43
:使用延迟加载,构造函数尽可能简洁。
实践
44
:以手工方式将代码优化:删除空白函数;删除无用代码;削减强度,使用一元表达式;合并常量;删除相同的子表达式;展开循环;简化代数;移动循环内的不变式。
实践
45
:编译为本机代码,可以获得更快速度。
第五部分
多线程
实践
46
:面对
instance
函数,
synchronized
锁定的是对象而非函数或代码。一个函数或程序区段被声明为
synchronized
,并不意味同一时刻只能由一个线程运行它。
实践
47
:弄清楚
synchronized statics
函数与
synchronized instance
函数之间的差异。
实践
48
:以
private
方式保护要同步的数据,确保同步机制。
实践
49
:避免无谓的同步控制,采用“单对象多锁”技术以允许更多并发动作。
实践
50
:访问共享变量时请使用
synchronized
或
volatile
。
实践
51
:在单一操作中锁定所有用到的对象。
实践
52
:同步化多个对象时,以固定而全局性的顺序取得多个
locks
以避免死锁。
实践
53
:优先使用
notifyAll()
而非
notify()
。
实践
54
:针对
wait()
和
nofityAll()
使用旋锁
(spin locks)
。
实践
55
:使用
wait()
和
notifyAll()
替换轮询
(polling loops)
。
实践
56
:不要对锁定对象的对象引用重新赋值。
实践
57
:不要调用
stop()
或
suspend()
。
实践
58
:通过线程之间的协作来中止线程。
第六部分
类与接口
实践
59
:运用
interface
支持多继承。
实践
60
:避免
interface
中的函数发生冲突。
实践
61
:如需提供部分实现,使用
abstract
抽象类。
实践
62
:区分
interface
、
abstract class
和
concrete class
。
实践
63
:审慎地定义和实现不可变类。
实践
64
:欲传递或接收可变对象的对象引用时,请实施
clone()
。
实践
65
:使用继承或委托来定义不可变类。
实践
66
:实现
clone()
方法时记得调用
super.clone()
。
实践
67
:别只依赖
finalize()
清理内存以外的资源,应专门实现一个函数来处理。
实践
68
:在构造函数内调用
non-final
函数时要当心。
分享到:
相关推荐
候捷老师的Practical Java一书及代码
此书以准则/条款形式进行编排,探究改善代码的68个重要主题,提供精晰明快、精心撰写之示例和方案。所有示例和方案都带有详尽的解说,你可以将它们融入自身工作之中。 Peter Haggar是一位公认的Java编程专家,也是...
此书以准则/条款形式进行编排,探究改善代码的68个重要主题,提供精晰明快、精心撰写之示例和方案。所有示例和方案都带有详尽的解说,你可以将它们融入自身工作之中。这些编程和设计上的实践方案,描述了经验丰富的...
Practical.Java简体中文版 出自第一线java专家之手 68个改善代码的重要主题
Practical Java(简体中文)Word版本
Practical Java全书源码,Practical Java是一本J2ME手机游戏开发相关的书,书中的实例对于学习Java游戏编程很有参考作用。
practical java 实际编程中的那些小的技巧
本书围绕Java编程中遇到的实际问题展开,可以说书中所列专题是那些令许多Java程序员困惑不已的FAQ。
Practical Java也是一本和J2ME手机游戏开发相关的书,书中的实例也是很典型和实用的,对学习非常有用处,推荐下载。
侯捷 Practical Java 原代码
本书出自第一线Java编程专家之手,为读者展现正确、高效、强国之JAVA代码实践方案。 侯捷翻译,质量有保障。 pdf 高清版本。
侯捷和刘永丹合译得Practical Java,压缩包内含3个文件,其中2个pdf,一个为全简体版,虽有所删割,我还没添加书签,但排版良好,推荐。 另一个是网友合成版,前3章是侯捷发布的免费版,当然是繁体的,后面的是网上...
Practical Java viii 2 對象與相等性(Objects and Equality) 25 實踐8:區分reference type 和primitive type 25 實踐9:區分== 和 equals() 29 實踐10:不要倚賴equals()的缺省實現33 實踐11:實現equals()時必須...
practical java文档 和practical 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 Java2 Practical Java2 Practical Java2
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 Source Code