首先我们从主函数看:new C();而c函数里面你首先对建了一个B的对象(B b = new B())。而静态代码块在类初始化时便已加载,并且只执行一次,所以首先执行静态代码块( System.out.print("静态代码块")),然后程序往下执行:这里面有个隐式的super(),程序执行执行类A,首先执行的是类A的构造函数(类只有在使用New调用创建的时候才会被JAVA类装载器装入,创建类实例时,首先按照父子继承关系进行初始化,类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法),然后类A里面创建类B的对象,构造函数是随着类的对象的建立而加载了,所以程序执行System.out.print("B");注意:静态代码块只执行一次,最后程序执行子类c的自己的方法。所以结果是:静态代码块BABC |