[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");
}
}