JAVA的主类本身到底有没有被实例化?

package staticSuper;

class StaticSuper {
    static {
        System.out.println("super static block");
    }
    StaticSuper(){
        System.out.println("super constructor");
    }
}

public class StaticTests extends StaticSuper {
    static {
        System.out.println("static block");
    }
    StaticTests(){
        System.out.println("main class");
    }
    public static void main(String args[]) {
        System.out.println("in main");
    }
}

结果:

super static block
static block

疑问:
父类的static块的内容先于子类的static块的内容执行,感觉上就像是实例化子类时先实例化父类。可问题是两个类的构造函数中要求的输出统统都没有,因此引发了我的疑惑——第一,主类,就这里的staticTests到底有没有被实例化?能否用一个引用变量指向它?第二,如果被实例化了,为何能够绕过构造器?如果没有被实例化,那为什么运行了static中的内容?为什么父类中的static先于子类中的static
谢谢

红颜莎娜
浏览 577回答 1
1回答

侃侃尔雅

对象初始化过程:(1) 主类的超类由高到低按顺序初始化静态成员(2) 主类静态成员的初始化。//创建实例时,如果不创建实例,则后面的不执行 ,你这了就没有创建实例(3) 主类的超类由高到低进行默认构造方法的调用,在调用每一个超类的默认构造方法前,先对此超类进行非静态成员的初始化。 (4) 主类非静态成员的初始化。 (5) 主类的构造方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java