本文共 925 字,大约阅读时间需要 3 分钟。
(1)子类A继承父类B, A a = new A(); 则:
父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
(2)若子类构造函数中显式的调用了父类的某构造函数,则调用该构造函数
class C { C() { System.out.print("C"); }}class A { C c = new C(); A() { this("A"); System.out.print("A"); } A(String s) { System.out.print(s); }}class Test extends A { Test() { super("B"); System.out.print("B"); } public static void main(String[] args) { new Test(); }}
CBB
首先new了一个子类对象,那么就要调用构造方法来初始化该子类对象,但是该类继承自A,所以要先调用父类的构造方法,这里通过super(“B”)显示的调用了父类的带参构造。执行父类的带参构造前要先对父类中的对象进行初始化,对父类中的c成员进行初始化,调用了C类的无参构造,所以调用顺序为: 先调用C类的无参构造 再调用A类的带参构造 最后调用调用子类的构造(3)在JVM调用mian方法之前先用进行静态内容的初始化。顺序为:父类的静态变量, 父类的静态代码块 ,子类的静态变量,子类的静态代码块。
public class Test{ static int cnt = 6; static{ cnt += 9; }public static void main(string[] args){ System.out.println(“cnt =” + cnt);}static{ Cnt /=3; };}
Cnt=5
转载地址:http://yqaji.baihongyu.com/