【読者メモ】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クラスは列挙型と呼ばれる特別なクラス※要勉強

enumは列挙した数のインスタンスを生成する

アノテーションはクラスやメンバにメタ情報を付与する @Overrideなど

・ネストしたクラスには基本的にstatic修飾子を付与する。付与しないとインナークラスになる※要勉強

・ネストしたクラスにはstaticなネストしたクラス、インナークラス、ローカルインナークラス、匿名クラスの4種類がある

・オブジェクトは可能であればイミュータブルにしたほうがソースの可読性が上がる

・オーバーライドには、シグニチャは変更できない、アクセス修飾子は元のアクセス修飾子より緩くないといけない、戻り値は元の型かそのサブクラスでないといけない、throws節は元の型かそのサブクラスでないといけない、元のメソッドがfinalだとオーバーライドできないという制約げある

・オーバーライドするときは@Overrideを付与するのが望ましい

・abstractでないメソッドをオーバーライドするときは、オーバーライドされる想定かどうか、メソッドの目的が同じか確認する

複数コンストラクタを持つ場合はチェーンしたほうが可読性が上がる

コンストラクタからインスタンスメソッドを使用するのはあまり好ましくない

インスタンス構築の処理が複雑な場合、staticファクトリメソッドやビルダーなどインスタンス生成専用のクラスを検討する


そもそもちゃんと理解してなかったところと、完全に忘れていたところがかなりあったorz

 

Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)

Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)