Edited at

Java8 Gold試験の備忘録

More than 1 year has passed since last update.

書きかけ


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メソッドを宣言する。