Java
資格

Java8 Gold試験の備忘録

書きかけ

Javaのクラス設計

不変クラス

  • クラス:継承されないようにfinal宣言
  • フィールド:外部からのアクセスと変更を不可にするため、private final宣言
  • アクセサメソッド:ゲッターメソッドのみ提供

static初期化子

public class Test {
    static int x;
    static { x = 1; }

Enum

  • 自動的にfinalクラスとしてコンパイルされるため、修飾子にfinalやabstructは指定できない
  • 自動的にstaticが修飾されるが、明示的にstaticを付けてもよい
  • extendsはできないが、implementsは可能
  • メソッド内での宣言は不可
  • コンストラクタは必ずprivateで宣言する
  • フィールドやメソッドを記述する場合は、列挙定数の最後にセミコロンが必要。記述しない場合は、セミコロンは付けても付けなくてもよい
メソッド 説明
static E valueOf(String name) 指定された名前の列挙定数を返却
static E[] values() 列挙型の配列を返却
String name() 列挙定数名を文字列としたを返却
int ordinal() 0から始まる列挙定数の序数を返却

Java8での追加要素

interface A {
    static void test1() {
        System.out.println("static");
    }

    default void test2() {
        System.out.println("default");
    }
}

class B implements A { }

class test {
    public static void main(String[] args) {
        A.test1(); // 「static」
        A.test2(); // コンパイルエラー
        B b = new B();
        b.test1(); // コンパイルエラー
        b.test2();  // 「default」
    }
}
  • 同じシグニチャのdefaultメソッドを持つinterfaceを多重継承した場合、コンパイルエラーが発生する。そのため、オーバーライドする必要性がある。
  • 同じシグニチャのdefaultメソッドを持つinterfaceの型階層の距離が違う場合は多重継承が可能である。その際、距離が最も近いdefaultメソッドが呼び出される。

デザインパターン

シングルトン

public class Singleton {
    private static Singleton s = new Singleton(); // 1

    private Singleton() {} // 2

    public static Singleton getInstance(){ // 3
        return singleton;
    }
}

①インスタンスが常に一つだけ生成されるように、private staticフィールドを宣言する。
②外部からインスタンスを生成できないように、コンストラクタをprivateで宣言する。
③外部からインスタンス参照を取得できるように、インスタンスを返却するpublic staticメソッドを宣言する。