[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 11827] すみません、間 違えました( Re: StaticInitializer の実行タイミング)



遠藤です。
すみません、さきほどの添付ファイル間違えてました。

Yasuhiro Endoh wrote:
> こんばんは、遠藤です。
> 
> 今日、話題に出た
> staticフィールドの初期化の順序を確認するコードを書きました。
> 
> 添付のファイルには、クラスA、B、Cが定義されています。
> 
> 
>>javac StaticInitTest.java
>>java -verbose StaticInitTest
> 
> 
> とすると、ABCの順、
> 
> 
>>java -verbose StaticInitTest -r
> 
> 
> とすると、CBAの順になります。
> 
> 
> 
> ------------------------------------------------------------------------
> 
> public final class StaticInitTest{
>     public static void main(String[] args) throws ClassNotFoundException {
>         if(args.length > 0 && args[0].equals("-r")) {
>             loadCBA();
>         } else {
>             loadABC();
>         }
>     }
> 
>     public static void loadABC() {
>         System.out.println("loadABC");
>         System.out.println("A.val=" + A.val);
>         System.out.println("B.val=" + B.val);
>         System.out.println("C.val=" + C.val);
>     }
> 
>     public static void loadCBA() throws ClassNotFoundException {
>         System.out.println("loadCBA");
>         Class.forName("C");
>         Class.forName("B");
>         Class.forName("A");
>     }
> }
> 
> class A {
>     public static int val = 2;
>     public static A instance = new A();
> 
>         {
>             System.out.println("A's static initializer");
>         }
> 
>     A() {
>         System.out.println("A's constructor");
>     }
> }
> 
> class B {
>     public static int val = 3;
>     public static B instance = new B();
> 
>         {
>             System.out.println("B's static initializer");
>         }
> 
>     B() {
>         System.out.println("B's constructor");
>     }
> }
> 
> class C {
>     public static int val = 4;
>     public static C instance = new C();
> 
>         {
>             System.out.println("C's static initializer");
>         }
> 
>     C() {
>         System.out.println("C's constructor");
>     }
> }
> 


-- 
// 遠藤 康裕

public final class StaticInitTest{
    public static void main(String[] args) throws ClassNotFoundException {
        if(args.length > 0 && args[0].equals("-r")) {
            loadCBA();
        } else {
            loadABC();
        }
    }

    public static void loadABC() {
        System.out.println("loadABC");
        System.out.println("A.val=" + A.val);
        System.out.println("B.val=" + B.val);
        System.out.println("C.val=" + C.val);
    }

    public static void loadCBA() throws ClassNotFoundException {
        System.out.println("loadCBA");
        Class.forName("C");
        Class.forName("B");
        Class.forName("A");
    }
}

class A {
    public static int val = 2;
    public static A instance = new A();

    static {
        System.out.println("A's static initializer");
    }

    A() {
        System.out.println("A's constructor");
    }
}

class B {
    public static int val = 3;
    public static B instance = new B();

    static {
        System.out.println("B's static initializer");
    }
    
    B() {
        System.out.println("B's constructor");
    }
}

class C {
    public static int val = 4;
    static {
        System.out.println("C's static initializer");
    }
    public static C instance = new C();

    C() {
        System.out.println("C's constructor");
    }
}