`

改善代码的68个原则(Practical Java )

阅读更多

 

 

第一部分 一般技术

实践 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一书及代码

    《Practical Java》是侯捷老师的一本关于Java编程实践的书籍,旨在帮助读者深入理解Java语言,并通过实际代码示例提升编程技能。这本书涵盖了Java的基础到进阶内容,是学习和提升Java技术的重要资源。 1. **Java...

    Practical Java(简体中文)

    《Practical Java》和《Effective Java》正是这样两部著作,它们对Java的重要而基础的技术细节进行了详尽、深刻的介绍和剖析,每个主题独立成章,既方便读者根据需求选择性阅读,又能彼此呼应,形成一个完整的学习...

    Practical Java(含源码)

    《实用Java编程(含源码)》是一本专注于解决Java编程实际问题的书籍,它针对的是Java程序员在日常开发过程中可能会遇到的各种困扰和难题。这本书的目的是为了解答那些经常出现但又容易让人迷惑的问题,从而提升Java...

    practical java (高清PDF)——68条改善代码的重要主题

    此书以准则/条款形式进行编排,探究改善代码的68个重要主题,提供精晰明快、精心撰写之示例和方案。所有示例和方案都带有详尽的解说,你可以将它们融入自身工作之中。这些编程和设计上的实践方案,描述了经验丰富的...

    《Practical Java》中文版随书源码

    《Practical Java》中文版随书源码是一个包含与J2ME手机游戏开发相关的实践教程资源。这本书通过实例深入浅出地介绍了Java编程语言在移动平台上的应用,特别是针对Java Micro Edition (J2ME)环境。J2ME是Java的一个...

    practical java(中文版)

    本书深入探讨了Java语言的核心特性,包括语法、面向对象编程原则、异常处理、集合框架以及多线程等基础内容。通过具体的实例和最佳实践,作者引导读者理解如何编写出高质量、易于维护的Java代码。 1. **基本语法与...

    Practical Java全书源码.rar

    《Practical Java全书源码》是一份宝贵的资源,它涵盖了J2ME(Java 2 Micro Edition)平台上的手机游戏开发。J2ME是Oracle公司为小型设备和嵌入式系统设计的一种Java平台,广泛应用于早期的移动设备,如功能手机和...

    practical_java.zip_practical java

    通过阅读《Practical Java》并结合这些代码示例,读者可以逐步掌握以下Java编程的核心概念: 1. **基础语法**:包括变量、数据类型、运算符、流程控制语句(如if-else、for、while)等,这些都是编写任何程序的基础...

    Practical.Java简体中文版

    这本书的核心在于68个关键主题,每个主题都针对一个特定的编程问题或最佳实践,旨在提升开发者在实际项目中的技能和效率。 在阅读这本书的过程中,你可以期待学习到以下重要知识点: 1. **基础语法**:包括变量、...

    Practical Java

    ### 实践1:Java中的参数传递机制 ...本篇实践指南介绍了Java中两个重要的概念:参数传递机制和使用`final`关键字定义常量。通过深入理解这些概念,开发者可以更好地控制程序的行为,提高代码质量和可维护性。

    Practical Java【完整版】【PDF】【含源码】【侯捷译】

    侯捷和刘永丹合译得Practical Java,压缩包内含3个文件,其中2个pdf,一个为全简体版,虽有所删割,我还没添加书签,但排版良好,推荐。 另一个是网友合成版,前3章是侯捷发布的免费版,当然是繁体的,后面的是网上...

    Practical 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(海格尔经典之作)

    《Practical Java》是Java编程领域的一部经典之作,作者为(美)海格尔,它与《Effective Java》齐名,都是程序员提升编程技能的重要参考资料。本书深入浅出地介绍了如何编写高质量、高效的Java程序,旨在帮助开发者...

    Deep Learning: Practical Neural Networks with Java 完整高清英文azw3版

    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

    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

    本资源“Practical Java Source Code”旨在提供一系列实际应用中的Java代码示例,帮助开发者深入理解Java编程的实践操作。 Java的核心特性包括面向对象、平台独立性(通过Java虚拟机JVM实现)、丰富的类库、强大的...

    Practical database programming with Java

    标题《Practical database programming with Java》和描述《Practical database programming with Java》提到了关于Java数据库编程的实际应用,但给出的内容部分并非直接相关的知识说明,而是涉及书籍信息、版权声明...

Global site tag (gtag.js) - Google Analytics