我们从下面一段代码来看
/**
* 测试变量初始化顺序
* @author Administrator
*
*/
public class VariateInitialize {
public static void main(String[] args) {
new Test(4);//实例化一个Test类
}
}
class Test{
private static int a = 1; // 第一个赋值的
public Test(int a) {
this.a=a; // 第四方赋值的
System.out.println("构造方法执行后a的值为:"+this.a);
}
static {
System.out.println("静态代码块执行前a的值为:"+a);
a=2; // 第二个赋值的
System.out.println("代码块执行后a的值为:"+a);
}
{
a=3; // 第三个赋值 的
System.out.println("普通代码块执行后a的值为:"+a);
}
}
执行后的结果为
从中可以看出执行的变量的初始化顺序为
- 初始化赋值
- 静态代码块赋值
- 普通代码块赋值
- 构造方法赋值
- 最后是实例化了对象之后,通过对象.属性或对象.方法赋值。