Clear Code
  • Introduction
    • About This Book
    • Timeline
    • Software Killers
    • Billion Dollar Mistakes
    • Clear Code Overview
    • Clear Code Rules
  • Data Processing
    • Separate Data Collection And Processing
    • Create Data Models
    • Separate Use Cases
    • Data Should Be Immutable
  • Examples
    • Separate Use Cases With Data Model
  • Maintenance Cost
    • Consider the Maintenance Cost
    • The Software Exists In Time
    • Don't Feed the Monsters
  • OOP
    • Separate Data And Procedures
    • Do Not Use Inheritance
    • When To Avoid Inheritance?
    • What Is The Problem With Abstract Frameworks?
  • VARIOUS
    • The Real Single Responsibility Principle
    • The problem with Clean Code's name
    • How To Handle Warnings
    • Do Not Create Constant Collection Classes
  • Externals
    • Links
    • Quotes
    • Funny
  • Technology
    • Git Tutorials
  • Clean Code
    • Clean Code Introduction
      • Origin & Overview
      • Advanced
      • Typical Issues
    • Clean Code Outline
      • Why Clean Code?
      • Clean Code
      • Clean Code Approaches
      • Specification & Design
      • Duplication
      • Refinement & Refactoring
      • Conventions
      • Names
      • Types
      • Methods
      • Nulls and Validity Checks
      • Comments
      • Dead Code
      • Error Handling
      • Classes
      • Code Formatting
      • Unit Tests
      • Special Cases
      • Object Oriented Programming
      • General Code Smells
    • Clean Code Links
    • Clean Code TOC
    • Effective Java TOC
Powered by GitBook
On this page
  • Creating and Destroying Objects
  • Methods Common to All Objects
  • Classes and Interfaces
  • Generics
  • Enums and Annotations
  • Methods
  • General Programming
  • Exceptions
  • Concurrency
  • Serialization

Was this helpful?

  1. Clean Code

Effective Java TOC

2016.08.19

Last updated 5 years ago

Was this helpful?

The table of contents of the book . It is a good overview of the rules recommended by the book.

Creating and Destroying Objects

  • Consider static factory methods instead of constructors

  • Consider a builder when faced with many constructor parameters

  • Enforce the singleton property with a private constructor or an enum type

  • Enforce noninstantiability with a private constructor

  • Avoid creating unnecessary objects

  • Eliminate obsolete object references

  • Avoid finalizers

Methods Common to All Objects

  • Obey the general contract when overriding equals

  • Always override hashCode when you override equals

  • Always override toString

  • Override clone judiciously

  • Consider implementing Comparable

Classes and Interfaces

  • Minimize the accessibility of classes and members

  • In public classes, use accessor methods, not public fields

  • Minimize mutability

  • Favor composition over inheritance

  • Design and document for inheritance or else prohibit it

  • Prefer interfaces to abstract classes

  • Use interfaces only to define types

  • Prefer class hierarchies to tagged classes

  • Use function objects to represent strategies

  • Favor static member classes over nonstatic

Generics

  • Don’t use raw types in new code

  • Eliminate unchecked warnings

  • Prefer lists to arrays

  • Favor generic types

  • Favor generic methods

  • Use bounded wildcards to increase API flexibility

  • Consider typesafe heterogeneous containers

Enums and Annotations

  • Use enums instead of int constants

  • Use instance fields instead of ordinals

  • Use EnumSet instead of bit fields

  • Use EnumMap instead of ordinal indexing

  • Emulate extensible enums with interfaces

  • Prefer annotations to naming patterns

  • Consistently use the Override annotation

  • Use marker interfaces to define types

Methods

  • Check parameters for validity

  • Make defensive copies when needed

  • Design method signatures carefully

  • Use overloading judiciously

  • Use varargs judiciously

  • Return empty arrays or collections, not nulls

  • Write doc comments for all exposed API elements

General Programming

  • Minimize the scope of local variables

  • Prefer for-each loops to traditional for loops

  • Know and use the libraries

  • Avoid float and double if exact answers are required

  • Prefer primitive types to boxed primitives

  • Avoid strings where other types are more appropriate

  • Beware the performance of string concatenation

  • Refer to objects by their interfaces

  • Prefer interfaces to reflection

  • Use native methods judiciously

  • Optimize judiciously

  • Adhere to generally accepted naming conventions

Exceptions

  • Use exceptions only for exceptional conditions

  • Use checked exceptions for recoverable conditions and runtime exceptions for programming errors

  • Avoid unnecessary use of checked exceptions

  • Favor the use of standard exceptions

  • Throw exceptions appropriate to the abstraction

  • Document all exceptions thrown by each method

  • Include failure-capture information in detail messages

  • Strive for failure atomicity

  • Don’t ignore exceptions

Concurrency

  • Synchronize access to shared mutable data

  • Avoid excessive synchronization

  • Prefer executors and tasks to threads

  • Prefer concurrency utilities to wait and notify

  • Document thread safety

  • Use lazy initialization judiciously

  • Don’t depend on the thread scheduler

  • Avoid thread groups

Serialization

  • Implement Serializable judiciously

  • Consider using a custom serialized form

  • Write readObject methods defensively

  • For instance control, prefer enum types to readResolve

  • Consider serialization proxies instead of serialized instances

Effective Java by Joshua Bloch (2nd edition, 2008)