java吧 关注:1,248,881贴子:12,729,245
  • 2回复贴,共1

静态代码块和代码块的执行属性

只看楼主收藏回复

public class Test {
public static Test t1 = new Test();
{
System.out.println("a");
}
static
{
System.out.println("b");
}
public static void main(String[] args) {
Test t2 = new Test();
}
}
代码如上,执行结果是aba。请各位大神解释下为什么!!!


IP属地:浙江1楼2016-09-05 20:46回复


    2楼2016-09-05 21:07
    回复
      因为类在new的时候会先执行且只执行一次静态代码 Test t2 = new Test(); 这里第一次new test对象 可以看到类内部有public static Test t1 = new Test(); 和静态代码块 会先执行 静态对象的创建 然而 应为创建过一次对象了 所以 静态对象只会执行 构造代码块 先打印a 之后再执行Test t2 = new Test();的静态代码块 打印 b 在执行构造代码块打印a 结果就出现aba的现象


      IP属地:广东3楼2016-09-05 21:35
      回复