本帖最后由 王红霞 于 2012-7-13 03:05 编辑
1-静态代码块优先于构造代码块执行
2-执行子类时要先加载父类的构造函数,即加载leaf的时候 先加载root 再加载Mid
class Root
{
static//静态代码块 ;类一加载 static就加载了 所以这是第一步输出 1
{
System.out.println("1:Root静态构造代码块") ;
}
{ //构造代码块
System.out.println("2:Root普通构造代码块") ;//然后即便是依次执行父类的构造函数和子类的构造函数 4
}
public Root()
{ //定义父类
System.out.println("3:Root构造函数") ;//5
}
}
class Mid extends Root //子类
{
static
{ //静态代码块 类一加载 static也即加载 所以这是第二部输出 2
System.out.println("4:Mid静态构造代码块") ;
}
{
System.out.println("5:Mid普通构造代码块");//6
}
public Mid()
{
System.out.println("6:Mid无参构造函数") ;//7
}
public Mid(String msg)
{
this ();
System.out.println("7:Mid有参构造函数"+msg) ;//8
}
}
class Leaf extends Mid
{
static
{
System.out.println("8eaf静态构造代码块") ;//类一加载 static就加载了 这是第三步输出 3
}
{
System.out.println("9eaf普通构造代码块") ;// 9
}
public Leaf()
{
super("疯狂java讲义");
System.out.println("10eaf有参构造函数") ; //10
}
}
public class Demo
{
public static void main(String[] args)
{
new Leaf() ;
}
}
打印结果如下图: |
|