这是我的代码:

class Developer{
    static{
        System.out.println("In static block Developer");
    }

    Developer(){
        System.out.println("In constructor Developer");
    }
}

public class Programmer extends Developer{
    static{
        System.out.println("In static block Programmer");
    }

    Programmer(){
        System.out.println("In constructor Programmer");
    }

    public static void main(String args[]){
        //Different static block when no commented
        //Developer d = new Programmer();
    }
}


输出是这样的(当main中没有任何内容时):


  在静态块中
  
  在静态块编程器中


但是,如果我在主要方法Developer d = new Programmer()中编写,则输出为:


  在静态块编程器中
  
  在构造函数中
  
  在构造函数中


不执行类Developer中的静态块。有逻辑上的解释吗?

最佳答案

输出

In static block Developer


应该生成,因为当由类加载器加载static时将执行Developer

关于java - 用空的main和对象初始化在Java中执行的不同静态块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25834027/

10-11 07:07