您的位置:首页 > 编程语言 > Java开发

java静态程序块、普通程序块、构造函数

2016-06-03 17:56 513 查看

java静态程序块、普通程序块、构造函数

package java002;

class Root{
static{
System.out.println("root static block");
}
{
System.out.println("root block");
}
public Root() {
System.out.println("root Constructor");
}
}

class Mid extends Root{
static{
System.out.println("Mid static block");
}
{
System.out.println("Mid block");
}
public Mid() {
System.out.println("Mid Constructor");
}
public Mid(String msg){
System.out.println("Mid Constructor with param " + msg);
}
}

class Leaf extends Mid{
static{
System.out.println("Leaf static block");
}
{
System.out.println("Leaf block");
}
public Leaf() {
super("aabbcc");
System.out.println("Leaf Constructor");
}
}

public class Main {

public static void main(String[] args) {
new Leaf();
new Leaf();
}

}
程序运行结果:
root static block

Mid static block

Leaf static block

root block

root Constructor

Mid block

Mid Constructor with param aabbcc

Leaf block

Leaf Constructor

root block

root Constructor

Mid block

Mid Constructor with param aabbcc

Leaf block

Leaf Constructor

静态程序块执行在普通程序块之前,普通程序块执行在构造函数块之间,静态程序块只执行一次。所以上面的运行结果中
root static block
Mid static block
Leaf static block
只出现了一次。每次创建子类对象的时候,首先需要创建父类对象,所以,会出现上面的情况。
也就是说,在第一次执行new Leaf();的时候,首先找到Mid,然后找到Root,进行静态程序块的执行。等待所有的静态程序块都执行完成后,在从父类开始进行普通程序块和构造函数的执行。
第二次执行new Leaf();的时候,不在进行静态程序块的执行,只执行普通程序块和构造函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: