加载类时,先父类静态,再子类静态,然后是子类中main方法,main方法中如果有生成子类对象的语句,先找到子类构造函数,因为每个子类构造函数里头都会有super语句(jdk默认或者自己提供,且默认在构造函数中第一行),则先初始化父类非静态,然后父类构造,再然后是子类非静态,子类构造函数(除super之外),最后是main方法余下的语句。
总体来说:父类先于子类,在同类中顺序是静态,非静态,构造函数。
如:
public class Test3 extends Test4
{
{
System.out.print("1");
}
Test3()
{
//System.out.print("A");
//super(3);
System.out.print("B");
System.out.print("2");
}
static
{
System.out.print("3");
}
{
System.out.print("4");
}
public static void main(String[] args)
{
System.out.print("7");
new Test3();
System.out.print("A");
}
static
{
System.out.print("D");
}
}
class Test4
{
{
System.out.print("8");
}
Test4()
{
System.out.print("E");
}
Test4(int i)
{
System.out.print("5");
}
static
{
System.out.print("6");
}
{
System.out.print("9");
}
static
{
System.out.print("C");
}
}
答案是
6C3D789E14B2APress any key to continue...