Java

少しずつまとめていきます。

Effective Java 3rd Edition

Effective Javaの原著を自分なりに和訳したものと説明を載せていきます。(気分で更新するので遅いです)

項目 タイトル 和訳 説明
第1章 はじめに   はじめに    
         
         
第8章 メソッド 49 パラメータの正当性を検査する  
  50 必要な場合、防御的にコピーする    
  51 メソッドのシグニチャを注意深く設計する    
  52 オーバーロードを注意して使う    
  53 可変長引数を注意して使う    
  54 nullではなく、空コレクションか空配列を返す    
  55 オプショナルを注意して返す    
  56 すべて公開のAPI要素に対してドキュメントコメントを書く    
第9章 プログラミング一般 57 ローカル変数のスコープを最小限にする    
  58 従来のforループよりもfor―eachループを選ぶ    
  59 ライブラリを知り、ライブラリを使う    
  60 正確な答えが必要ならば、floatとdoubleを避ける    
  61 ボクシングされた基本データよりも基本データ型を選ぶ    
  62 他の型が適切な場所では、文字列を避ける    
  63 文字列結合のパフォーマンスに用心する    
  64 インタフェースでオブジェクトを参照する    
  65 リフレクションよりもインタフェースを選ぶ    
  66 ネイティブメソッドを注意して使う    
  67 注意して最適化する    
  68 一般的に受け入れられている命名規約を守る    
         
         

第1章 はじめに

第2章 オブジェクトの生成と消滅

  • 項目1 コンストラクタの代わりにstaticファクトリメソッドを検討する
  • 項目2 多くのコンストラクタパラメータに直面したときにはビルダーを検討する
  • 項目3 privateのコンストラクタかenum型でシングルトン特性を強制する
  • 項目4 privateのコンストラクタでインスタンス化不可能を強制する
  • 項目5 資源を直接結び付けるよりも依存性注入を選ぶ
  • 項目6 不必要なオブジェクトの生成を避ける
  • 項目7 使われなくなったオブジェクト参照を取り除く
  • 項目8 ファイナライザとクリーナーを避ける
  • 項目9 try-よりもtry-with-resourcesを選ぶ

第3章 すべてのオブジェクトに共通のメソッド

  • 項目10 equalsをオーバーライドsるときは一般契約に従う
  • 項目11 equalsをオーバーライドするときは、常にhashCodeをオーバーライドする
  • 項目12 toStringを常にオーバーライドする
  • 項目13 cloneを注意してオーバーライドする
  • 項目14 Comparableの実装を検討する

第4章 クラスとインタフェース

  • 項目15 クラスとメンバーへのアクセス可能性を最小限にする
  • 項目16 publicのクラスでは、publicのフィールドではなく、アクセッサ―メソッドを使う
  • 項目17 可変性を最小限にする
  • 項目18 継承よりもコンポジションを選ぶ
  • 項目19 継承のために設計および文書化する、でなければ継承を禁止する
  • 項目20 抽象クラスよりもインタフェースを選ぶ
  • 項目21 将来のためにインタフェースを設計する
  • 項目22 型を定義するためだけにインタフェースを使う
  • 項目23 タグ付きクラスよりもクラス階層を選ぶ
  • 項目24 非staticのメンバークラスよりもstaticのクラスに限定する
  • 項目25 ソースファイルを単一のトップレベルのクラスに限定する

第5章 ジェネリックス

  • 項目26 原形を使わない
  • 項目27 無検査警告を取り除く
  • 項目28 配列よりもリストを選ぶ
  • 項目29 ジェネリック型を使う
  • 項目30 ジェネリックメソッドを使う
  • 項目31 APIの柔軟性向上のために境界ワイルドカードを使う
  • 項目32 ジェネリックスと過変長引数を注意して組み合わせる
  • 項目33 型安全な異種コンテナを検討する

第6章 enumとアノテーション

  • 項目34 int定数の代わりにenumを使う
  • 項目35 序数の代わりにインスタンスフィールドを使う
  • 項目36 ビットフィールドの代わりにEnumSetを使う
  • 項目37 序数インデックスの代わりにEnumMapを使う
  • 項目38 拡張可能なenumをインタフェースで模倣する
  • 項目39 命名パターンよりもアノテーション選ぶ
  • 項目40 常にOverrideアノテーションを使う
  • 項目41 型を定義するためにマーカーインタフェースを使う

第7章 ラムダとストリーム

  • 項目42 無名クラスよりもラムダを選ぶ
  • 項目43 ラムダよりもメソッド参照を選ぶ
  • 項目44 標準の関数型インタフェースを使う
  • 項目45 ストリームを注意して使う
  • 項目46 ストリームで副作用のない関数を選ぶ
  • 項目47 戻り値型としてStreamよりもCollectionを選ぶ
  • 項目48 ストリームを並列化するときは注意を払う 

第8章 メソッド

  • 項目49 パラメータの正当性を検査する
  • 項目50 必要な場合、防御的にコピーする
  • 項目51 メソッドのシグニチャを注意深く設計する
  • 項目52 オーバーロードを注意して使う
  • 項目53 可変長引数を注意して使う
  • 項目54 nullではなく、空コレクションか空配列を返す
  • 項目55 オプショナルを注意して返す
  • 項目56 すべて公開のAPI要素に対してドキュメントコメントを書く

第9章 プログラミング一般

  • 項目57 ローカル変数のスコープを最小限にする
  • 項目58 従来のforループよりもfor―eachループを選ぶ
  • 項目59 ライブラリを知り、ライブラリを使う
  • 項目60 正確な答えが必要ならば、floatとdoubleを避ける
  • 項目61 ボクシングされた基本データよりも基本データ型を選ぶ
  • 項目62 他の型が適切な場所では、文字列を避ける
  • 項目63 文字列結合のパフォーマンスに用心する
  • 項目64 インタフェースでオブジェクトを参照する
    • 日本語訳
  • 項目65 リフレクションよりもインタフェースを選ぶ
  • 項目66 ネイティブメソッドを注意して使う
  • 項目67 注意して最適化する
  • 項目68 一般的に受け入れられている命名規約を守る

第10章 例外

  • 項目69 ローカル変数のスコープを最小限にする
  • 項目70 回復可能な状態にはチェックされる例外を、プログラミングエラーには実行時例外を使う
  • 項目71 チェックされる例外を不必要に使うのを避ける
  • 項目72 標準的な例外を使う
  • 項目73 抽象概念に適した例外をスローする
  • 項目74 各メソッドがスローするすべての例外を文書化する
  • 項目75 詳細メッセージにエラー記録情報を含める
  • 項目76 エラーアトミック性に努める
  • 項目77 例外を無視しない

第11章 並行性

  • 項目78 共有された可変データへのアクセスを同期する
  • 項目79 過剰な同期は避ける
  • 項目80 スレッドよりもエグゼキュータ、タスク、ストリームを選ぶ
  • 項目81 waitとnotifyよりも並行処理ユーティリティを選ぶ
  • 項目82 スレッド安全性を文書化する
  • 項目83 遅延初期化を注意して使う
  • 項目84 スレッドスケジューラに依存しない

第12章 シリアライズ

  • 項目85 Javaのシリアライズよりも代替手段を選ぶ
  • 項目86 Serializableを細心の注意を払って実装する
  • 項目87 カスタムシリアライズ形式の使用を検討する
  • 項目88 防御的にreadObjectメソッドを書く
  • 項目89 インスタンス制御に対しては、readResolveよりもenum型を選ぶ
  • 項目90 シリアライズされたインスタンスの代わりに、シリアライズ・プロキシを検討する

初級

セクション キーワード
開発と実行の流れ コンパイル。コンパイラ。インタプリタ。クラスファイル。CPU。JVM。マシン語。
Javaプログラムの基本構造 ブロック。クラスブロック。メソッドブロック。クラス名。インデント。コメント。mainメソッド。
変数 変数。メモリ。識別子。予約語。データ型。型。初期化。定数。
   

中級

スポンサーリンク