Java 类中各成员的加载顺序

[java]
public class SuperAndSub {
public static void main(String[] args) {
Sub s3 = new Sub();
}
}

class Super {
static int a = getA();

static {
System.out.println("加载Super的静态块");
}

int b = getB();

{
System.out.println("加载Super的普通块");
}

Super() {
System.out.println("加载Super的构造器");
}

static int getA() {
System.out.println("加载Super的静态变量");
return 1;
}

static int getB() {
System.out.println("加载Super的实例变量");
return 2;
}
}

class Sub extends Super {
static int c = getC();

static {
System.out.println("加载Sub的静态块");
}

int d = getD();

{
System.out.println("加载Sub的普通块");
}

Sub() {
System.out.println("加载Sub的构造器");
}

static int getC() {
System.out.println("加载Sub的静态变量");
return 1;
}

static int getD() {
System.out.println("加载Sub的实例变量");
return 2;
}
}
[/java]

运行结果:
加载Super的静态变量
加载Super的静态块
加载Sub的静态变量
加载Sub的静态块
加载Super的实例变量
加载Super的普通块
加载Super的构造器
加载Sub的实例变量
加载Sub的普通块
加载Sub的构造器

结果分析

  1. 首先是父类静态变量和静态块:
  2. 然后是子类的静态变量和静态块:
  3. 然后是父类的a.普通实例b.普通块儿c.构造方法
  4. 最后是子类的其它成分:a.普通实例,b.普通块儿,c.构造方法

You may also like...