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
我做这个题之前也有小疑问,为什么最开始不是先加载静态代码里面内容,导致我做错!
看完题解后,发现
publicstaticTest t1 =newTest();这个创建的对象t1也是静态的,所以这里得出结论:当都是静态的情况下,按照顺序先后执行!所以创建完静态的t1之后,依次往下执行创建t1时触发的构造代码块,然后按循序在执行静态代码块,然后在执行创建t2时候的构造代码块!
但是如果我把静态代码块放到
publicstaticTest t1 =newTest();执行这个语句之前那结果又会是怎么样?
答案:blockBblockAblockA这里就是照应了刚才说的红色的那一句话!!!
本文详细解析了Java中静态代码块与对象初始化的执行顺序,通过示例代码展示了静态变量初始化及构造代码块的执行流程。讨论了不同情况下静态代码块的加载时机,强调了静态成员初始化的优先级。
437

被折叠的 条评论
为什么被折叠?



