-
构造代码块
构造代码块(Constructor block)是 Java 中用来初始化实例成员变量的一种方式,也称为实例初始化块(Instance Initialization Block)。构造代码块的语法是在类中直接编写一对花括号 {},在花括号中编写初始化代码,这些代码会在每次创建对象时执行,并且在构造方法之前执行。构造代码块可以用于对实例成员变量进行复杂的初始化操作,比如根据某些条件计算初始值,或者对某些成员变量进行计算。构造代码块和构造方法的执行顺序是先执行构造代码块,然后才执行构造方法。(来自ChatGPT)
-
代码
public class A { public int a = 5; public A() { System.out.println("父类构造方法"); f(); } public void f() { System.out.println(a); System.out.println("父类f函数"); } } class B extends A{ int a = 6; public B() { //super(); { // 构造代码块 } System.out.println("子类构造方法"); f(); } public void f() { System.out.println(a); System.out.println("子类f函数"); }
-
主函数
public class test { public static void main(String []args) { B b = new B(); b.f(); } }
-
输出
父类构造方法 0 子类f函数 子类构造方法 6 子类f函数 6 子类f函数
-
第二行输出0是因为,在对实例化时,首先会调用父类的构造函数,由于含函数重写,父类会调用重用后的f()函数,而此时类b中的成员变量并没有得到初始化,故使用默认值0。b中成员变量初始化的时机是在执行完父类构造方法执行结束后的构造代码块中进行初始化,即类中成员变量的赋值时机是在调用构造代码块的时候执行的,而调用构造代码块的时机是在super方法执行完之后。
Java:构造代码块
构造代码块是Java中用于初始化实例成员变量的方式,它在创建对象时执行,在构造方法之前。文章通过一个例子展示了构造代码块的执行顺序,先于构造方法,并解释了成员变量的初始化时机是在调用构造代码块时进行的。
摘要由CSDN通过智能技术生成