当子类继承父类,其子类和父类中静态代码块,构造代码块,无参构造之间的输出顺序

时间:2023-02-11 18:13:27

今天无意中看到了这道“坑”的题目,说实话,如果对静态代码块,普通代码块和无参构造它们概念不理解的话,这确实,考试出了这样的题目,那这就真的是老师眼中的送分题,我们眼里的送命题,纯靠猜,废话不多说,先上代码才是真的

package text;

class TextA{
TextA() {
System.out.println("我是父类无参构造函数");
}
{
System.out.println("我是父类构造代码块");
}
static{
System.out.println("我是父类静态代码块");
}
}
public class TextB extends TextA{
public TextB() {
System.out.println("我是子类无参构造函数");
}
{
System.out.println("我是子类构造代码块");
}
static{
System.out.println("我是子类静态代码块");
}
public static void main(String[] args) {
//测试
TextB textB = new TextB();
}
}

输出结果如下:

当子类继承父类,其子类和父类中静态代码块,构造代码块,无参构造之间的输出顺序


无参构造:在没有写有参构造的时候,创建对象时,系统默认就会调用无参构造,用于初始化,只被执行一次,是随着对象的加载而加载,由于TextB继承了TextA,其实在TextB中的无参构造调用之前,先用了super()方法,调用了父类的无参构造,毕竟是先有爸爸才有儿子嘛

构造代码块:位于类体中,特点:给对象进行初始化的,执行时机在构造函数前,对象一建立就会立即执行

静态代码块:位于类体中,被static修饰的内容随着类的加载而加载,静态代码块的执行时机在main函数之前,只会被执行一次

可能讲的不是很清楚,还要多练习才行