第一部分
一般技术
实践
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》是侯捷老师的一本关于Java编程实践的书籍,旨在帮助读者深入理解Java语言,并通过实际代码示例提升编程技能。这本书涵盖了Java的基础到进阶内容,是学习和提升Java技术的重要资源。 1. **Java...
《Practical Java》和《Effective Java》正是这样两部著作,它们对Java的重要而基础的技术细节进行了详尽、深刻的介绍和剖析,每个主题独立成章,既方便读者根据需求选择性阅读,又能彼此呼应,形成一个完整的学习...
《实用Java编程(含源码)》是一本专注于解决Java编程实际问题的书籍,它针对的是Java程序员在日常开发过程中可能会遇到的各种困扰和难题。这本书的目的是为了解答那些经常出现但又容易让人迷惑的问题,从而提升Java...
此书以准则/条款形式进行编排,探究改善代码的68个重要主题,提供精晰明快、精心撰写之示例和方案。所有示例和方案都带有详尽的解说,你可以将它们融入自身工作之中。这些编程和设计上的实践方案,描述了经验丰富的...
《Practical Java》中文版随书源码是一个包含与J2ME手机游戏开发相关的实践教程资源。这本书通过实例深入浅出地介绍了Java编程语言在移动平台上的应用,特别是针对Java Micro Edition (J2ME)环境。J2ME是Java的一个...
本书深入探讨了Java语言的核心特性,包括语法、面向对象编程原则、异常处理、集合框架以及多线程等基础内容。通过具体的实例和最佳实践,作者引导读者理解如何编写出高质量、易于维护的Java代码。 1. **基本语法与...
《Practical Java全书源码》是一份宝贵的资源,它涵盖了J2ME(Java 2 Micro Edition)平台上的手机游戏开发。J2ME是Oracle公司为小型设备和嵌入式系统设计的一种Java平台,广泛应用于早期的移动设备,如功能手机和...
通过阅读《Practical Java》并结合这些代码示例,读者可以逐步掌握以下Java编程的核心概念: 1. **基础语法**:包括变量、数据类型、运算符、流程控制语句(如if-else、for、while)等,这些都是编写任何程序的基础...
这本书的核心在于68个关键主题,每个主题都针对一个特定的编程问题或最佳实践,旨在提升开发者在实际项目中的技能和效率。 在阅读这本书的过程中,你可以期待学习到以下重要知识点: 1. **基础语法**:包括变量、...
### 实践1:Java中的参数传递机制 ...本篇实践指南介绍了Java中两个重要的概念:参数传递机制和使用`final`关键字定义常量。通过深入理解这些概念,开发者可以更好地控制程序的行为,提高代码质量和可维护性。
侯捷和刘永丹合译得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》是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 Source Code”旨在提供一系列实际应用中的Java代码示例,帮助开发者深入理解Java编程的实践操作。 Java的核心特性包括面向对象、平台独立性(通过Java虚拟机JVM实现)、丰富的类库、强大的...
标题《Practical database programming with Java》和描述《Practical database programming with Java》提到了关于Java数据库编程的实际应用,但给出的内容部分并非直接相关的知识说明,而是涉及书籍信息、版权声明...