ブログトップ 記事一覧 ログイン 無料ブログ開設

Strategic Choice

2011-09-20

[][]Effective Java

書籍「達人プログラマ」の習慣に倣い、「Ruby」や「Scala」を少々勉強しました。その中で感じたのが、『超絶得意な「軸」言語あってこそ、他言語学習の相乗効果が高くなるのでは』ということです。そこでまず「Java」にロックオンして、言語バイブルであり、オブジェクト指向のエッセンスもちりばめられている名著「Effective Java」を(再)精読してみようと思います。

極力ソースを読み書きしながら勉強したいので、実行可能なテストコードに無理矢理まとめてみます。

テストコード保管場所

Effective Java 写経ソース保管場所

一覧

第2章オブジェクトの生成と消滅
項目01コンストラクタの代わりにstatic ファクトリーメソッドを検討する
項目02数多くのコンストラクタパラメータに直面した時にはビルダーを検討する
項目03privateのコンストラクタかenum 型でシングルトン特性を強制する
項目04privateのコンストラクタでインスタンス化不可能を強制する
項目05不必要なオブジェクトの生成を避ける
項目06廃れたオブジェクト参照を取り除く
項目07ファイナライザを避ける
第3章すべてのオブジェクトに共通のメソッド
項目08equals をオーバーライドする時は一般契約に従う
項目09equals をオーバーライドする時は、常にhashCode をオーバーライドする
項目10toString を常にオーバーライドする
項目11clone を注意してオーバーライドする
項目12Comparable の実装を検討する
第4章クラスとインタフェース
項目13クラスとメンバーへのアクセス可能性を最小限にする
項目14public のクラスでは、public のフィールドではなく、アクセッサーメソッドを使う
項目15可変性を最小限にする
項目16継承よりコンポジションを選ぶ
項目17継承のために設計および文書化する、でなければ継承を禁止する
項目18抽象クラスよりインタフェースを選ぶ
項目19型を定義するためだけにインタフェースを使用する
項目20タグ付クラスよりクラス階層を選ぶ
項目21戦略を表現するために関数オブジェクトを使用する
項目22非static のメンバークラスよりstatic のメンバークラスを選ぶ
第5章ジェネリックス
項目23新たなコードで原型を使用しない
項目24無検査警告を取り除く
項目25配列よりリストを選ぶ
項目26ジェネリック型を使用する
項目27ジェネリックメソッドを使用する
項目28API の柔軟性向上のために境界ワイルドカードを使用する
項目29型安全な異種コンテナーを検討する
第6章enum とアノテーション
項目30int 定数の代わりにenum を使用する
項目31序数の代わりにインスタンスフィールドを使用する
項目32ビットフィールドの代わりにEnumSet を使用する
項目33序数インデックスの代わりにEnumMap を使用する
項目34拡張可能なenum をインタフェースで模倣する
項目35命名パターンよりアノテーションを選ぶ
項目36常にOverride アノテーションを使用する
項目37型を定義するためにマーカーインタフェースを使用する
第7章メソッド
項目38パラメータの正当性を検査する
項目39必要な場合には、防御的にコピーする
項目40メソッドのシグニチャを注意深く設計する
項目41オーバーロードを注意して使用する
項目42可変長引数を注意して使用する
項目43null ではなく、空配列か空コレクションを返す
項目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スレッドよりエグゼキューターとタスクを選ぶ
項目69wait とnotify よりコンカレンシーユーティリティを選ぶ
項目70スレッド安全性を文書化する
項目71遅延初期化を注意して使用する
項目72スレッドスケジューラに依存しない
項目73スレッドグループを避ける
第11章シリアライズ
項目74Serializable を注意して実装する
項目75カスタムシリアライズ形式の使用を検討する
項目76防御的にreadObject を書く
項目77インスタンス制御に対しては、readResolve よりenum 型を選ぶ
項目78シリアライズされたインスタンスの代わりに、シリアライズ・プロキシを検討する

出典

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)

参考

最新脳科学が教える 高校生の勉強法    東進ブックス

最新脳科学が教える 高校生の勉強法 東進ブックス

  • 「第5章 天才を作る記憶のしくみ」
(2011/12/16追記)「最新脳科学が教える 高校生の勉強法」について
受験脳の作り方―脳科学で考える効率的学習法 (新潮文庫)

受験脳の作り方―脳科学で考える効率的学習法 (新潮文庫)

  • 題名も新たに文庫化され、大幅改訂されました。
    • 内容の適用性を考慮すると、題名から「高校生の〜」が取れたのは非常によいと思います。
  • 最新の知見を加味して大きく加筆・修正されていますので、こちらがおススメです。
    • 私は買いなおしてしまいました (^_^;

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/asakichy/20110920/1316470369