少しずつまとめていきます。
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メソッド。 |
変数 | 変数。メモリ。識別子。予約語。データ型。型。初期化。定数。 |