非静态代码块随对象的创建而执行,
而创建对象会自动调用父类构造器super()
加载了父类,必然会执行静态代码块,
但父类没有创建对象,为什么还会执行父类的非静态代码块?
初始化子类之前,先要初始化父类,因为子类可能会调用父类的方法。然后你说父类没有创建对象,但是其实子类对象就是父类的一个对象。这点可以从,子类的向上转型可以把子类对象转换成父类对象看出
首先,你这里的非静态代码块应该是指的构造代码块!
其次,调用构造函数时,构造代码块也会执行,而且还是在构造函数之前执行
最后,子类的构造函数会默认调用父类的构造函数。
所以假设你现在在通过子类构造函数创建子类对象,那么一共会执行四个东西,第一时父类的构造代码块,第二是父类的构造函数,第三是子类的构造代码块,第四是子类构造函数。