package com.chenming.test;
public class ExaminationDemo {
public static void main(String[] args) {
System.out.println("Class Loading:");
new D();
}
}
class E {
E() {
System.out.println("E构造方法");
}
public void methodE() {
System.out.println("E的普通方法");
}
}
class F {
F() {
System.out.println("F构造方法");
}
public void methodF() {
System.out.println("F普通方法");
}
}
class B {
E e = new E();
static F f = new F();
public String strB = getStrB();
static {
System.out.println("B静态代码块");
f.methodF();
}
{
System.out.println("B匿名代码块");
}
B() {
System.out.println("B构造方法");
e.methodE();
}
private String getStrB() {
System.out.println("初始化B的实例成员变量");
return "strB";
}
}
class C extends B {
static {
System.out.println("C静态代码块");
}
{
System.out.println("C匿名代码块");
}
C() {
System.out.println("C构造方法");
}
}
class D extends C {
public String strD = getStrD();
public static String strD1 = getStrD1();
static {
System.out.println("D静态代码块");
}
{
System.out.println("D匿名代码块");
}
D() {
System.out.println("D构造方法");
}
public String getStrD() {
System.out.println("实例化D的普通变量");
return "strD";
}
public static String getStrD1() {
System.out.println("实例化D的静态变量");
return "strD1";
}
}
Class Loading:
F构造方法
B静态代码块
F普通方法
C静态代码块
实例化D的静态变量
D静态代码块
E构造方法
初始化B的实例成员变量
B匿名代码块
B构造方法
E的普通方法
C匿名代码块
C构造方法
实例化D的普通变量
D匿名代码块
D构造方法
Java类加载小结:
父类>子类
静态>普通
静态实例变量>静态代码块
实例成员变量>匿名代码块>构造方法
父类静态实例变量-->父类静态代码块-->子类静态实例变量-->子类静态代码块--> 父类一般实例变量
-->父类匿名代码块-->父类构造方法-->子类实例变量-->子类匿名代码块-->子类构造方法。