关于JAVA Static的初始化顺序(及递归错误)

关于JAVA Static的初始化顺序(及递归错误)

package com.cisco.learning;

class ClassOne{

//去掉static将产生*Error
//因为有了静态修饰,导致不会第二次初始化。
private static ClassOne classOne=new ClassOne();

ClassOne(){
System.out.println("ClassOne Constructor");
}
}

class ClassTwo{

private static int i=getMethod();

private static int getMethod() {
// TODO Auto-generated method stub
System.out.println("ClassTwo static");
return 0;
}

}

public class CopyOfTestStatic {

/**
* @param args
*/
public static void main(String[] args) {
new ClassOne();
System.out.println("________");
new ClassOne();
}

//没有打印ClassTwo static,说明没有创建对象时(或访问静态域),不会初始化静态成员
/*//
* ClassOne Constructor
ClassOne Constructor
说明先初始化了静态域,而且以后不再初始化,所以不会产生递规*Error。
________
ClassOne Constructor*/

}

package com.cisco.learning;

import java.util.Calendar;

public class Elvis {
private static final int i=10;
public static final Elvis INSTANCE = new Elvis();
private final int beltSize;
private static final int CURRENT_YEAR = Calendar.getInstance().get(
Calendar.YEAR);

private Elvis() {
System.out.println(i);
beltSize = CURRENT_YEAR - 1930;
}

public int beltSize() {
return beltSize;
}

/*10
Elvis wears a size -1930 belt.
说明,当访问静态域或者NEW()时,Class的静态部分就开始初始化;*/
public static void main(String[] args) {
System.out.println("Elvis wears a size " + INSTANCE.beltSize()
+ " belt.");
}
}