Effective Javaのまとめのまとめ

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


## Effective Javaって？

> JavaでプログラミングをするすべてのSE必読の書籍です。
[Effective Java 第2版](http://www.amazon.co.jp/Effective-Java-%E7%AC%AC2%E7%89%88-The-Series/dp/489471499X)

> Effective Javaは全Javaプログラマ必帯と言って良い名著..
[Effective Java 第2版 が今月発売されるようです](http://db2.jugem.cc/?eid=1635)

> Java中級者以上なら読むことがマナーであると言われるJavaの必読書。
[[書評]Effective Java 第2版](http://wada811.blogspot.com/2014/01/effective-java.html)

> Javaを使う上で知っておいたほうが良い知識・注意した方がいいテクニックを紹介した本
[Effective Java 第2版](http://seeku.hateblo.jp/entry/2013/07/14/093646)

数々のブログやサイトで評価され[Amazon](http://www.amazon.co.jp/EFFECTIVE-JAVA-%E7%AC%AC2%E7%89%88-Java-Series/dp/4621066056/ref=zg_bs_515820_2)のレビューやランキングでも常に上位に存在する一冊。



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


## Effective Javaの章構成

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

## 関連リンク集
* 書籍
[日本語版 目次](http://www001.upp.so-net.ne.jp/yshibata/ej2e_toc.pdf)
[英語版 PDF](http://uet.vnu.edu.vn/~chauttm/e-books/java/Effective.Java.2nd.Edition.May.2008.3000th.Release.pdf)

* ソースサンプル
[Github effective-java-examples](https://github.com/marhan/effective-java-examples)

* ストラテジックチョイス
[[オブジェクト指向プログラミング][EffectiveJava]Effective Java](http://d.hatena.ne.jp/asakichy/20110920/1316470369)

* IT戦記
[Effective Java 読書会 1 日目「static メソッドの使い方などなど」](http://d.hatena.ne.jp/amachang/20100215/1266245521)
[Effective Java 読書会 2 日目 「equals night」](http://d.hatena.ne.jp/amachang/20100216/1266330626)
[Effective Java 読書会 3 日目「それ Apache Commons で出来るよ」](http://d.hatena.ne.jp/amachang/20100218/1266497676)
[Effective Java 読書会 4 日目「最近はあまり継承とか使わないらしい」](http://d.hatena.ne.jp/amachang/20100219/1266605361)
[Effective Java 読書会 5 日目 「最後に見せたツンデレ」](http://d.hatena.ne.jp/amachang/20100222/1266850995)
[Effective Java 読書会 6 日目 「ジェネリクス！」](http://d.hatena.ne.jp/amachang/20100223/1266911861)
[Effective Java 読書会 7 日目 「PECS! PECS! PECS!」](http://d.hatena.ne.jp/amachang/20100225/1267073381)
[Effective Java 読書会 8 日目 「それ enum で出来るよ」](http://d.hatena.ne.jp/amachang/20100225/1267114471)
[Effective Java 読書会 9 日目 「Enum の拡張とアノテーション」](http://d.hatena.ne.jp/amachang/20100226/1267213599)
[Effective Java 読書会 10 日目 「Java の基本テクニック集」](http://d.hatena.ne.jp/amachang/20100303/1267624822)
[Effective Java 読書会 11 日目 「Java マルチスレッド難しいいい」](http://d.hatena.ne.jp/amachang/20100309/1268153192)
[Effective Java 読書会 12 日目 「スレッド・セーフってなによ！！」](http://d.hatena.ne.jp/amachang/20100324/1269425706)
[Effective Java 読書会 13 日目 「Java の例外めんどくさい」](http://d.hatena.ne.jp/amachang/20100325/1269492368)
[Effective Java 読書会 14 日目 「シリアライズ！シリアライズ！」](http://d.hatena.ne.jp/amachang/20100326/1269585997)


* Qiita
[EffectiveJava読書会1日目](http://qiita.com/nabuchi@github/items/087803bda368bdb29a19)
[EffectiveJava読書会2日目](http://qiita.com/qwerty__/items/bb40ca48674bcbbe98bd)
[EffectiveJava読書会3日目 Part.1]()
[EffectiveJava読書会4日目](http://qiita.com/tetsuro_m/items/92ba244f7dc589205136)
[EffectiveJava読書会6日目 - 第6章 enum とアノテーション](http://qiita.com/4NO/items/05f035ba0b7f6c186221)
[EffectiveJava読書会7日目 - 第7章 メソッド](http://qiita.com/taichiw0424/items/308888f0957f19e1a363)
[Effective Java読書会8日目- 第8章 プログラミング一般](http://qiita.com/taka66/items/73f972a1d8975c53f162)
[Effective Java読書会9日目 - 例外](http://qiita.com/kata/items/bd129ba6113a61126389)
[Effective Java読書会10日目 - 並行性](http://qiita.com/naoinaoi/items/31b7b4ec6bfb35e18cea)
[Effective Java読書会11日目 - シリアライズ]()

* slideshare
[Effective java 輪読会 第2章 項目1,2,3,4](http://www.slideshare.net/appresso/effective-java-1-28907031)
[Effective java 輪読会 第2章 項目5,6,7](http://www.slideshare.net/appresso/effective-java-1-567?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=20)
[Effective java 輪読会 第3章 項目8,9,10](http://www.slideshare.net/appresso/effective-java-2?qid=8c0d9c22-954a-4024-8684-b60a8f3f3f9e&v=qf1&b=&from_search=9)
[Effective java 輪読会 第3章 項目11, 12](http://www.slideshare.net/appresso/effective-java-3?qid=8c0d9c22-954a-4024-8684-b60a8f3f3f9e&v=qf1&b=&from_search=10)
[Effective Java 輪読会 第4章 項目13-17](http://www.slideshare.net/appresso/effective-java-3-29784906?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=19)
[Effective java 輪読会 第4章 項目18-22](http://www.slideshare.net/appresso/effective-java-3-30520848?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=18)
[Effective java 輪読会 第5章 項目23-25](http://www.slideshare.net/appresso/effective-java-4?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=17)
[Effective java 輪読会 第5章 項目26-29](http://www.slideshare.net/appresso/effective-java-4-31658259?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=16)
[Effective java 輪読会 第6章 項目30-31](http://www.slideshare.net/appresso/effective-java-6-31979396?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=15)
[Effective java 輪読会 第6章 項目32-34](http://www.slideshare.net/appresso/effective-java-6-4344?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=14)
[Effective Java 輪読会 第6章 項目35-37](http://www.slideshare.net/appresso/effective-java-6-3537?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=13)
[Effective Java 輪読会 第7章 項目38-40](http://www.slideshare.net/appresso/effective-java-7-38-40?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=10)
[Effective Java 輪読会 第7章 項目41-42](http://www.slideshare.net/appresso/effective-java-7-41-42-32979267?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=qf1&b=&from_search=23)
[Effective Java 輪読会 第7章 項目43-44](http://www.slideshare.net/appresso/effective-java-7-43-44?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=9)
[Effective Java 輪読会 項目45-48](http://www.slideshare.net/appresso/effective-java-45-48?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=5)
[Effective Java 輪読会 項目49-52](http://www.slideshare.net/appresso/effective-java-49-52?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=4)
[Effective Java 輪読会 項目53-56](http://www.slideshare.net/appresso/effective-java-53-56?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=6)
[Effective java 輪読会 項目57-59](http://www.slideshare.net/appresso/effective-java-57-59?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=3)
[Effective Java 輪読会 項目60-62](http://www.slideshare.net/appresso/effective-java-60-62?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=2)
[Effective Java 輪読会 項目63-65](http://www.slideshare.net/appresso/effective-java-63-65?qid=4b04e3a6-4e76-4f93-abe6-8542a78800da&v=default&b=&from_search=1)

* Effective Javaに関する各種リンク(この投稿とかなり目的が近い)
[Java使いの必携書「Effective Java 第２版」を，通読・マスター・事後参照するためのリンク集](http://d.hatena.ne.jp/language_and_engineering/20121211/p1)

* 各章のコメント要点など
[Effective Javaを読んで](http://arvelt.hatenablog.com/entry/2012/07/04/000135)

* 各章、項目に対する感想、意見など
[Effective Java 第2版](http://seeku.hateblo.jp/entry/2013/07/14/093646)

* 各章、項目関するメモ
[書籍 Effective Java](http://d.hatena.ne.jp/tbpg/20120917/1347894460)