public static void main(String[] args) {
new ExtendClass();
}
static class BaseClass {
{
System.out.println("BaseClass{}1");
}
{
System.out.println("BaseClass{}2");
}
public BaseClass() {
System.out.println("BaseClass()");
}
}
static class ExtendClass extends BaseClass {
{
System.out.println("ExtendClass{}1");
}
public ExtendClass() {
System.out.println("ExtendClass()");
}
{
System.out.println("ExtendClass{}2");
}
}
普通のメソッド同様に、ローカル変数やsuper/thisなどのキーワードを使うことができます。
new ExtendClass();
}
static class BaseClass {
{
System.out.println("BaseClass{}1");
}
{
System.out.println("BaseClass{}2");
}
public BaseClass() {
System.out.println("BaseClass()");
}
}
static class ExtendClass extends BaseClass {
{
System.out.println("ExtendClass{}1");
}
public ExtendClass() {
System.out.println("ExtendClass()");
}
{
System.out.println("ExtendClass{}2");
}
}
■実行結果
BaseClass{}1
BaseClass{}2
BaseClass()
ExtendClass{}1
ExtendClass{}2
ExtendClass()
BaseClass{}2
BaseClass()
ExtendClass{}1
ExtendClass{}2
ExtendClass()
Static InitializerもInstance Initializerも複数個所に分断してかけますが、分断するとわかりづらくなります。 しかし、以下のような初期化の仕方はありじゃないでしょうか。 個人的な感覚ですが、コレクションの初期化については、コンストラクタや統一ブロックで処理するよりわかりやすくなると思います。
static class SetInitClass {
final private Collection<Integer> set1;
{
Set<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(3);
set.add(5);
set1 = Collections.unmodifiableCollection(set);
}
final private Collection<Integer> set2;
{
Set<Integer> set = new HashSet<Integer>();
set.add(2);
set.add(4);
set.add(6);
set2 = Collections.unmodifiableCollection(set);
}
}
final private Collection<Integer> set1;
{
Set<Integer> set = new HashSet<Integer>();
set.add(1);
set.add(3);
set.add(5);
set1 = Collections.unmodifiableCollection(set);
}
final private Collection<Integer> set2;
{
Set<Integer> set = new HashSet<Integer>();
set.add(2);
set.add(4);
set.add(6);
set2 = Collections.unmodifiableCollection(set);
}
}
0 件のコメント:
コメントを投稿