Effective Java シリーズの各項目の一覧。
第1章:はじめに
第2章:オブジェクトの生成と消滅
- 項目1:コンストラクタの代わりに static ファクトリーメソッドを検討する
- 項目2:数多くのコンストラクタパラメータに直面した時にはビルダーを検討する
- 項目3:private のコンストラクタか enum 型でシングルトン特性を強制する
- 項目4:private のコンストラクタでインスタンス化不可能を強制する
- 項目5:不必要なオブジェクトの生成を避ける
- 項目6:廃れたオブジェクト参照を取り除く
- 項目7:ファイナライザを避ける
第3章:すべてのオブジェクトに共通のメソッド
- 項目8:equals をオーバーライドするときは一般契約に従う
- 項目9:equals をオーバーライドする時は、常に hashCode をオーバーライドする
- 項目10:toString を常にオーバーライドする
- 項目11:clone を注意してオーバーライドする
- 項目12:Comparable の実装を検討する
第4章:クラスとインタフェース
- 項目13:クラスとメンバーへのアクセス可能性を最小限にする
- 項目14:public のクラスでは、public のフィールドではなく、アクセッサーメソッドを使う
- 項目15:可変性を最小限にする
- 項目16:継承よりコンポジションを選ぶ
- 項目17:継承のための設計および文書化する、でなければ継承を禁止する
- 項目18:抽象クラスよりインタフェースを選ぶ
- 項目19:型を定義するためだけにインタフェースを利用する
- 項目20:タグ付クラスよりクラス階層を選ぶ
- 項目21:戦略を表現するために関数オブジェクトを利用する
- 項目22:非 static のメンバークラスより static のメンバークラスを選ぶ
第5章:ジェネリックス
- 項目23:新たなコードで原型を使用しない
- 項目24:無検査警告を取り除く
- 項目25:配列よりリストを選ぶ
- 項目26:ジェネリック型を使用する
- 項目27:ジェネリックメソッドを利用する
- 項目28:API の柔軟性向上のために境界ワイルドカードを使用する(その1)
- 項目28:API の柔軟性向上のために境界ワイルドカードを使用する(その2)
- 項目29:型安全な異種コンテナーを検討する
(以下、ジェネリックスの補足記事)
第6章:enum とアノテーション
- 項目30:int 定数の代わりに enum を使用する
- 項目31:序数の代わりにインスタンスフィールドを利用する
- 項目32:ビットフィールドの代わりに EnumSet を使用する
- 項目33:序数インデックスの代わりに EnumMap を使用する
- 項目34:拡張可能な enum をインタフェースで模倣する
- 項目35:命名パターンよりアノテーションを選ぶ
- 項目36:常に Override アノテーションを利用する
- 項目37:型を定義するためにマーカーインタフェースを使用する
第7章:メソッド
- 項目38:パラメータの正当性を検査する
- 項目39:必要な場合は、防御的にコピーする
- 項目40:メソッドのシグニチャを注意深く設計する
- 項目41:オーバーロードを注意して利用する
- 項目42:可変長引数を注意して使用する
- 項目43:null ではなく空配列か空コレクションを返す
- 項目44:すべての公開 API 要素に対してドキュメントコメントを書く
第8章:プログラミング一般
- 項目45:ローカル変数のスコープを最小限にする
- 項目46:従来の for ループより for-each を選ぶ
- 項目47:ライブラリーを知り、ライブラリーを使う
- 項目48:正確な答えが必要ならば、float と double を避ける
- 項目49:ボクシングされた基本データより基本データを選ぶ
- 項目50:他の型が適切な場所では、文字列を避ける
- 項目51:文字列結合のパフォーマンスに用心する
- 項目52:インタフェースでオブジェクトを参照する
- 項目53:リフレクションよりインタフェースを選ぶ
- 項目54:ネイティブメソッドを注意して使用する
- 項目55:注意して最適化する
- 項目56:一般的に受け入れられている命名規約を守る
第9章:例外
- 項目57:例外的状態にだけ例外を使用する
- 項目58:回復可能な状態にはチェックされる例外を、プログラミングエラーには実行時例外を使用する
- 項目59:チェックされる例外を不必要に使用するのを避ける
- 項目60:標準例外を使用する
- 項目61:抽象概念に適した例外をスローする
- 項目62:各メソッドがスローするすべての例外を文書化する
- 項目63:詳細メッセージにエラー記録情報を含める
- 項目64:エラーアトミック性につとめる
- 項目65:例外を無視しない
第10章:平行性
- 項目66:共有された可変データへのアクセスを同期する(前半)
- 項目66:共有された可変データへのアクセスを同期する(後半)
- 項目67:過剰な同期は避ける
- 項目68:スレッドよりエグゼキューターとタスクを選ぶ
- 項目69:wait と notify よりコンカレンシーユティリティを選ぶ(前半)
- 項目69:wait と notify よりコンカレンシーユティリティを選ぶ(後半)
- 項目70:スレッド安全性を文書化する
- 項目71:遅延初期化を注意して使用する
- 項目72:スレッドスケジューラに依存しない
- 項目73:スレッドグループを避ける
第11章:シリアライズ
- 項目74:Serializable を注意して実装する
- 項目75:カスタムシリアライズ形式の使用を検討する(前半)
- 項目75:カスタムシリアライズ形式の使用を検討する(後半)
- 項目76:防御的に readObject を書く
- 項目77:インスタンス制御に対しては、readResolve より enum 型を選ぶ
- 項目78:シリアライズされたインスタンスの代わりに、シリアライズ・プロキシを検討する

EFFECTIVE JAVA 第2版 (The Java Series)
- 作者: Joshua Bloch,柴田芳樹
- 出版社/メーカー: 丸善出版
- 発売日: 2014/03/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る
Kindle 版はこちら(ただし英語)

Effective Java: A Programming Language Guide (Java Series)
- 作者: Joshua Bloch
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2008/05/08
- メディア: Kindle版
- この商品を含むブログを見る