public class Order {
// 变量
public String field = "变量";
// 初始化块
{
System.out.println(field);
System.out.println("初始化块");
}
// 静态变量
public static String staticField = "静态变量";
// 静态初始化块
static {
System.out.println(staticField);
System.out.println("静态初始化块");
}
// 构造器
public Order() {
System.out.println("构造器");
}
public static void main(String[] args) {
new Order();
}
}
/*它们的初始化顺序以此是静态变量---静态初始化块>变量----初始化块>构造器。*/
/*//静态初始化块
static
{
System.out.println(staticField);//这里报错的
System.out.println("静态初始化块");
}
//静态变量
public static String staticField = "静态变量";
如果是先初始化staticField,那为何报错呢
再看下面
{
System.out.println(field);
System.out.println("初始化块");
}
public static String field = "变量";
这个就没错,因为在执行初始化块之前,所有static属性都初始化完成了,所以没报错
我的观点还是:static属性 是根据代码顺序去加载的
*/