【読者メモ】Javaの基礎の基礎
Javaを改めて勉強しようと
『Javaエンジニア養成読本』
を読んでみて、意外と抜けてたところがあったのでおさらい
・クラス名はキャメルケースで書くのが一般的
・staticメソッドはインスタンスではなくクラスに関連付けられたメソッドなので、インスタンスとは無関係になる
・staticメソッドからは他のインスタンスメソッドを呼べない
・final修飾子のフィールドはフィールドの宣言時、コンストラクタ、イニシャライザのいずれかで代入
・他のコンストラクタを呼び出せるのはコンストラクタのみでコンストラクタの先頭行で一度のみ
・コンストラクタを一つも定義しないとディフォルトコンストラクタが生成されるが、一つでも定義すると生成されなくなる
・ディフォルトコンストラクタはスーパークラスの引数を持たないコンストラクタを呼び出すだけ
・コンストラクタは必ずスーパークラスのコンストラクタを呼び出す
・スーパークラスに引数を持たないコンストラクタがない場合はsuperを使って明示的に呼び出す
・フィールドは必ず値を持つ。
・初期化を省略した場合は型により、0、false、nullのいずれかが設定される
・意味のある値はstatic finalフィールドで名前付き定数を宣言すべき
・ユーティリティクラスはコンストラクタをstaticにしてインスタンスを生成させない
・特定のインスタンスを戻り値にするstaticファクトリメソッドはインスタンスの生成コストが抑えられる
・変化するstaticフィールドは1ユーザ1スレッドでもないと正しく動作しない
・アクセス修飾子はできるだけ絞る
・どこからでもアクセスできるということは結果動作を正しく把握できなくなるということ
・アクセス修飾子は4段階、private、何も書かない、protected、public
・privateはクラス内からのみアクセス可、何も書かないのは同じパッケージからのみアクセス可、protectedは継承したクラスからもアクセス可、publicは無制限にアクセス可
・クラスの仲間は抽象クラス、インターフェース、enum、アノテーション
・抽象クラスはabstract修飾子をつける
・抽象クラスはインスタンスを生成できない
・抽象クラスを継承した具象クラスでインスタンスを生成する
・抽象メソッドは処理をもたず、継承したクラスで実装する
・インターフェイスは抽象メソッドと名前付き定数のみ定義できる
・インターフェイスのフィールドはpublic static final、インターフェイスのメソッドはpublic abstractが暗黙で付与される
・インターフェイスを実装したクラスはインターフェイスの型で扱えるようになる
・インターフェイスにメソッドを追加する場合はdefault修飾子をつけると実装クラスへの影響を抑えられる
・enumクラスは列挙型と呼ばれる特別なクラス※要勉強
・アノテーションはクラスやメンバにメタ情報を付与する @Overrideなど
・ネストしたクラスには基本的にstatic修飾子を付与する。付与しないとインナークラスになる※要勉強
・ネストしたクラスにはstaticなネストしたクラス、インナークラス、ローカルインナークラス、匿名クラスの4種類がある
・オブジェクトは可能であればイミュータブルにしたほうがソースの可読性が上がる
・オーバーライドには、シグニチャは変更できない、アクセス修飾子は元のアクセス修飾子より緩くないといけない、戻り値は元の型かそのサブクラスでないといけない、throws節は元の型かそのサブクラスでないといけない、元のメソッドがfinalだとオーバーライドできないという制約げある
・オーバーライドするときは@Overrideを付与するのが望ましい
・abstractでないメソッドをオーバーライドするときは、オーバーライドされる想定かどうか、メソッドの目的が同じか確認する
・複数のコンストラクタを持つ場合はチェーンしたほうが可読性が上がる
・コンストラクタからインスタンスメソッドを使用するのはあまり好ましくない
・インスタンス構築の処理が複雑な場合、staticファクトリメソッドやビルダーなどインスタンス生成専用のクラスを検討する
そもそもちゃんと理解してなかったところと、完全に忘れていたところがかなりあったorz
Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)
- 作者: きしだなおき,のざきひろふみ,吉田真也,菊田洋一,渡辺修司,伊賀敏樹
- 出版社/メーカー: 技術評論社
- 発売日: 2014/11/11
- メディア: 大型本
- この商品を含むブログ (8件) を見る