日期:2014-05-20  浏览次数:20542 次

初始化块
public class HideTest
{
    //先执行初始化块将a Field赋值为6
    {
a = 6;
    }
    //再执行将a Field赋值为9
    int a = 9;

    public static void main(String[] args) 
    {
        //下面代码将输出9。
System.out.println(new HideTest().a);
    }
}

a = 6先执行的
为什么没有给a指定类型也能初始化?

------解决方案--------------------
1. 初始化块执行的时候,是为field 初始化了,所以它的类型是已知的。
2. 初始化执行的时候和你放的位置有关,你这里的放置就相当于,首先将a初始化为6,然后你本身声明的时候又给了一个显示的初始化值,就又被替换成9了。如果你把初始化块放在声明的后面,就会产生先被初始化为9,后被替换为6.
请参考下面的文章:
http://blog.csdn.net/shiyanming1223/article/details/6888188