arveltのソフトウェア技術メモ

Arvelt's software technology memo

Effective Javaを読んで

Effectivejavaを読んでの覚書。
また目次になってますねこれ。


そして以下の4つは読んでもいまいち入って来なかった章。
何気なく使ってはいるけど、多分自分でクラスに組み込んだりできないと思いました。
苦手がわかったのでよしとしましょう。
第5章 ジェネリクス
第6章 enumアノテーション
第10章 並行性
第11章 シリアライズ


第2章 オブジェクトの生成と消滅
コンストラクタパラメータが多い場合は、ビルダーパターンを検討する。
○シングルトンは単一フィールドのenumで容易に実現できる。
○Utilクラスはコンストラクタをprivateにしてインスタンス化を防ぐ。
リテラルの再インスタンス化、暗黙ボクシング変換の比較など、不必要なオブジェクトの生成を避ける。
○finalizeは使用しない。


第3章 一般メソッド
○equals、hasuCode、clone、toString、Comparbleのオーバーライドについて。


第4章 クラスとインターフェイス
○private、パッケージプライベート、procted、public、スコープが最小となるように適切に設定する。
○publicな可変フィールドを持つクラスはスレッドセーフにならない。
○publicフィールドはアクセサを使用する。
○クラスを不変にするために最大限尽くす。5つの規則。
○finalにできないやむを得ない理由がない限りは、すべてのフィールドをfinalにする。
○抽象クラスよりインターフェイスを選択する。
○メンバークラスは非staticではなく、staticにする。


第7章 メソッド
○引数パラメータの正当性をメソッドの先頭でチェックする。privateメソッドはassertionで引数を表明する。
○パラメータを防御的にコピーしてから使用する。(newしなおす)
○信頼出来ないパラメータをcloneしてはいけない。
○オーバーライドとオーバーロード
○可変長引数は本当に必要な状況な場合にのみ追加で渡せるようにする。
○配列やコレクションはnullではなく空配列や空コレクションを返すようにする。
○公開APIは必ずjavadocを書く


第8章 プログラミング一般
○ローカル変数は使用する場所で宣言する。同時に初期化する。
○forよりforeachを使う。
○正確な値が必要なときはfloatとdoubleを使わない。
○ボクシングされた基本型に==を使用するのは誤り。
○文字列結合にはStringBuilderを使う。
○オブジェクトは全てインターフェイスで参照することが望ましい。
○速いプログラムよりも良いプログラムを目指す
○命名規約を必要なく逸脱しないこと。


第9章 例外
○通常の制御フローから外れる場合にのみ、例外を使用する。
○呼び出し側で回復できる場合は、例外を投げてよい。
○プログラミングエラーは実行時例外になるようにする。
○可能な限り標準例外を再利用する。
○スローするすべての例外をjavadocの@throwsに記載する。
○例外の文字表現でその原因となったすべてのパラメータを表示できるようにする。
○メソッド呼び出し後の例外発生時にオブジェクトの状態が呼び出し前に戻るようにする。
○空のcatch句は許されない。なぜ空なのかのコメントを残す。
○複数例外発生時のthrow Exceptionやthrow throwableは、絶対にしてはいけない。

Effective Java 第2版 (The Java Series)

Effective Java 第2版 (The Java Series)