public class Test
{
public static Test t1 = new Test();
{
System.out.println("blockA");
}
static
{
System.out.println("blockB");
}
public static void main(String[] args)
{
Test t2 = new Test();
}
}
答案:blockAblockBblockA
我做这个题之前也有小疑问,为什么最开始不是先加载静态代码里面内容,导致我做错!
看完题解后,发现
public
static
Test t1 =
new
Test();
这个创建的对象t1也是静态的,所以这里得出结论:当都是静态的情况下,按照顺序先后执行!所以创建完静态的t1之后,依次往下执行创建t1时触发的构造代码块,然后按循序在执行静态代码块,然后在执行创建t2时候的构造代码块!
但是如果我把静态代码块放到
public
static
Test t1 =
new
Test();执行这个语句之前那结果又会是怎么样?
答案:
blockBblockAblockA这里就是照应了刚才说的红色的那一句话!!!