はじめに
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 シリアライズされたインスタンスの代わりに。シリアライズ・プロキシを検討する |
関連リンク集
-
ソースサンプル
Github effective-java-examples -
ストラテジックチョイス
[オブジェクト指向プログラミング][EffectiveJava]Effective Java -
IT戦記
Effective Java 読書会 1 日目「static メソッドの使い方などなど」
Effective Java 読書会 2 日目 「equals night」
Effective Java 読書会 3 日目「それ Apache Commons で出来るよ」
Effective Java 読書会 4 日目「最近はあまり継承とか使わないらしい」
Effective Java 読書会 5 日目 「最後に見せたツンデレ」
Effective Java 読書会 6 日目 「ジェネリクス!」
Effective Java 読書会 7 日目 「PECS! PECS! PECS!」
Effective Java 読書会 8 日目 「それ enum で出来るよ」
Effective Java 読書会 9 日目 「Enum の拡張とアノテーション」
Effective Java 読書会 10 日目 「Java の基本テクニック集」
Effective Java 読書会 11 日目 「Java マルチスレッド難しいいい」
Effective Java 読書会 12 日目 「スレッド・セーフってなによ!!」
Effective Java 読書会 13 日目 「Java の例外めんどくさい」
Effective Java 読書会 14 日目 「シリアライズ!シリアライズ!」 -
Qiita
EffectiveJava読書会1日目
EffectiveJava読書会2日目
EffectiveJava読書会3日目 Part.1
EffectiveJava読書会4日目
EffectiveJava読書会6日目 - 第6章 enum とアノテーション
EffectiveJava読書会7日目 - 第7章 メソッド
Effective Java読書会8日目- 第8章 プログラミング一般
Effective Java読書会9日目 - 例外
Effective Java読書会10日目 - 並行性
Effective Java読書会11日目 - シリアライズ -
slideshare
Effective java 輪読会 第2章 項目1,2,3,4
Effective java 輪読会 第2章 項目5,6,7
Effective java 輪読会 第3章 項目8,9,10
Effective java 輪読会 第3章 項目11, 12
Effective Java 輪読会 第4章 項目13-17
Effective java 輪読会 第4章 項目18-22
Effective java 輪読会 第5章 項目23-25
Effective java 輪読会 第5章 項目26-29
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第6章 項目32-34
Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目53-56
Effective java 輪読会 項目57-59
Effective Java 輪読会 項目60-62
Effective Java 輪読会 項目63-65 -
Effective Javaに関する各種リンク(この投稿とかなり目的が近い)
Java使いの必携書「Effective Java 第2版」を,通読・マスター・事後参照するためのリンク集 -
各章のコメント要点など
Effective Javaを読んで -
各章、項目に対する感想、意見など
Effective Java 第2版 -
各章、項目関するメモ
書籍 Effective Java