2014年3月22日土曜日

開発環境

Head First Java 第2版 ―頭とからだで覚えるJavaの基本(Kathy Sierra (著)、Bert Bates (著)、島田 秋雄 (監修)、神戸 博之 (監修)、高坂 一城 (監修)、夏目 大 (翻訳)、オライリージャパン)の10章(数値の扱いとスタティック変数、メソッッド)、エクササイズ(コンパイラになってみよう(p.310))を解いてみる。

エクササイズ(コンパイラになってみよう(p.310))

コード(BBEdit, Emacs)

StaticTests.java

class StaticSuper {
    // 1
    static {
        System.out.println("super static block");
    }

    // 3
    // コンストラクタの括弧()が抜けている
    StaticSuper() {
        System.out.println("super constructor");
    }
}

// スタティックは初期化される
// StaticTestskurクラスのstaticを初期化する。StaticTestsはStaticSuperのサブクラス
// なので、さらにその前にStaticSuperクラスのstaticが初期化される
public class StaticTests extends StaticSuper {
    static int rand;

    // 2
    static {
        rand = (int) (Math.random() * 6);
        System.out.println("static block " + rand);
    }

    // 4
    StaticTests() {
        System.out.println("constructor");
    }
    public static void main(String [] args) {
        // 3
        System.out.println("in main");
        
        // インスタンスを作成時に、StaticTestsのコンストラクタが呼び出される
        // StaticTestsはStaticSuperのサブクラスだから、StaticSuperクラス
        // のコンストラクタがさらに先に呼ばれる
        StaticTests st = new StaticTests();
    }
}

入出力結果(Terminal)

$ javac StaticTests.java && java StaticTests
super static block
static block 1
in main
super constructor
constructor
$

0 コメント:

コメントを投稿