标签:
public class Test {
private static int i;
private int k;
//静态代码块,主要用于初始化类的静态成员变量
//在静态代码块中不能使用非静态的成员变量或方法
static {
System.out.println("赋值前:i--------->"+i);
i = 1;
System.out.println("赋值后:i--------->"+i);
}
//代码块
{
System.out.println("赋值前:k--------->"+k);
k = 1;
System.out.println("赋值后:i--------->"+k);
}
public Test(){
super();
System.out.println("---进入构造器---");
System.out.println("i------>"+i);
System.out.println("k------>"+k);
}
public static void main(String[] args) {
System.out.println("---进入main方法---");
new Test();
System.out.println("completed!!!");
}
}
// 运行结果
//赋值前:i--------->0
//赋值后:i--------->1
//---进入main方法---
//赋值前:k--------->0
//赋值后:i--------->1
//---进入构造器---
//i------>1
//k------>1
//completed!!!
从运行结果我们可以看出Java初始化成员变量是:先静态 然后 非静态
大致的流程如下:
初始化静态成员变量 -> 初始化静态代码块 (静态变量或静态代码块,只在第一次调用该类时执行初始化) -> 初始化一般成员变量 -> 初始化代码块 -> 进入构造方法 -> 首先执行super()(可以选择不同的父类构造方法,默认为无参),初始化父类的成员变量 -> 执行构造方法中的初始化
标签:
原文地址:http://my.oschina.net/minbin/blog/358102