java程序的运行顺序有点乱,今天写一个测试程序:
得出的结论如下:
1. 静态成员变量/程序块按先后顺序先运行,先父类后子类
2. 子类main方法
3. new子类对象
4. 父类非静态成员变量(默认初始化/初始化)/程序块先后顺序先运行
5. 父类构造方法
6. 子类非静态成员变量(默认初始化/初始化)/程序块先后顺序先运行
7. 子类构造函数
class Father {
public static String var="father";
{
var="mother";
System.out.println("Father: non static code block: var = "+ var);
}
private int a = 1;
{
System.out.println("Father: non static code block: a = "+ a);
}
static{
System.out.println("Father: static code block: var = " + var);
}
Father(){
System.out.println("Father constructor");
}
public void test(){
System.out.println("father test method");
}
}
public class Child extends Father{
public String var = "Child";
private static int a;
{
var = "another_child";
System.out.println("Child: no static code block: var = " + var);
}
static{
System.out.println("Child: static code block: before--a = " + a);
a = 10;
System.out.println("Child: static code block: after--a = " + a);
}
Child(){
System.out.println("Child constructor");
}
public void test(){
System.out.println("Child test method");
}
public static void main(String[] args){
System.out.println("enter Child main method");
Father ts = new Father();
ts.test();
ts = new Child();
ts.test();
}
}