More than 1 year has passed since last update.

はじめに

Effective Java関連の記事をまとめ。
他にも見つけたら追加していこうと思います。
また、内容に誤り、問題がありましたら訂正しますので、コメントまたはプルリクエストをお願いします!

Effective Javaって?

JavaでプログラミングをするすべてのSE必読の書籍です。
Effective Java 第2版

Effective Javaは全Javaプログラマ必帯と言って良い名著..
Effective Java 第2版 が今月発売されるようです

Java中級者以上なら読むことがマナーであると言われるJavaの必読書。
[書評]Effective Java 第2版

Javaを使う上で知っておいたほうが良い知識・注意した方がいいテクニックを紹介した本
Effective Java 第2版

数々のブログやサイトで評価されAmazonのレビューやランキングでも常に上位に存在する一冊。

著者の Joshua J. Bloch はグーグル社やサンマイクロシステムズ社などで働き、Java言語仕様において、表明(assert, J2SE 1.4-)、列挙型(enum, J2SE 5.0-)の仕様策定をリード、Javaコレクション・フレームワーク、パッケージjava.math、java.util.concurrentなどにも関与したエンジニア。

Effective Javaの章構成

項目
第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の柔軟性向上のために境界ワイルドカードを使用する
項目29 型安全な異種コンテナーを検討する
第6章 enumとアノテーション 項目30 int定数の代わりにenumを使用する
項目31 序数の代わりにインスタンスフィールドを使用する
項目32 ビットフィールドの代わりにEnumSetを使用する
項目33 序数インデックスの代わりにEnumMapを使用する
項目34 拡張可能なenumをインターフェースで模倣する
項目35 命名パターンよりアノテーションを選ぶ
項目36 常にOverrrideアノテーションを使用する
項目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 共有された可変データへのアクセスを同期する
項目67 過剰な同期は避ける
項目68 スレッドよりエグゼキューターとタスクを選ぶ
項目69 waitとnotifyよりコンカレンシーユーティリティを選ぶ
項目70 スレッド安全性を文書化する
項目71 遅延初期化を注意して使用する
項目72 スレッドスケジューラに依存しない
項目73 スレッドグループを避ける
第11章 シリアライズ 項目74 Serializableを注意して実装する
項目75 カスタムシリアライズ形式の使用を検討する
項目76 防御的にreadObjectを書く
項目77 インスタンス制御に対してはreadResolveよりもenum型を選ぶ
項目78 シリアライズされたインスタンスの代わりに。シリアライズ・プロキシを検討する

関連リンク集

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.